2015-10-27 35 views
0

功能1:獲取JSON數據&商店功能保持觸發JSON之前處理完

我創建一個腳本,抽搐通道的陣列將通過JSON功能環中處理,然後用存儲「localStorage.setItem」作爲臨時存儲。我將它們保存在名稱,查看器和網址中。

功能2:排序數據

存儲的數據稍後可用於無需再次使用函數1以顯示信息。


問題

的sortdata功能不斷髮射前的功能1完成。由於數據未定義而導致出錯。此錯誤控制檯前彈出顯示從功能存儲1.

的所有信息,我的代碼:

$(window).load(function(){ 
    $.when(getData()).promise().done(function(){ 
     getStoredObj(); 
    }); 
}); 

function getData(){ 
    var streamArray=[]; 

    jQuery.each (channels, function (i, channel) { 
    channelId = channel.id; 
    channelUrl = channel.url; 

     var promise = $.ajax({ 
     dataType: "jsonp", 
     url: twitchApi + channelId, 
     success: 1, 
     }).done(function (data) { 

      if (data.stream == null) { 

      } else { 
      var displayName = data.stream.channel.display_name; 
      var viewerCount = data.stream.viewers; 
      streamArray.push({name: displayName, views: viewerCount, url: channelUrl});    

      localStorage.setItem("storedStreamArray", JSON.stringify(streamArray)); 
      console.log(JSON.stringify(streamArray)); 
      } 
     }); 
    }); 
} 

function getStoredObj() { 
    var retrievedObject = localStorage.getItem('storedStreamArray'); 
    var parsedObject = JSON.parse(retrievedObject); 

    <sorting codes here> 
} 

一些幫助在這裏真的很感激。 :)

+0

將排序代碼放在ajax成功函數中 – madalinivascu

+0

我在getData()的循環外添加了getStoredObj()。不工作,getStoredObj()仍然在localStorage之前觸發。 –

+0

請參閱http://api.jquery.com/ajaxcomplete/ – madalinivascu

回答

1

你打電話$.whengetData的結果,但getData不返回任何東西,更別說推遲審議的when可以使用。因此,沒有什麼可以等待的,並且您的done立即回撥呼叫getStoredObj

getData中,您需要收集您的ajax調用返回的所有延遲,並將它們傳回給調用者。這將是這樣的:

function getData(){ 
    return jQuery.map (channels, function (i, channel) { 
     return $.ajax(...).done(function (data) { 
     // Do work 
     }); 
    }); 
} 

每次迭代返回其ajax推遲,這是由map彙總,返回給調用者。然後,您可以對結果運行when,並在排序前等待加載完成。

相關問題