一千萬個為什麽

搜索

使用Jquery從本地文件中獲取JSON對象


我正在嘗試使用Jquery從本地文件中獲取JSON對象(產品)列表,並將所有對象存儲在名為allItems的單個數組中。該文件與代碼位於同一目錄中,並稱為“allItems.json”。我現在就是這樣做的:

function getAllSupportedItems(){
    var allItems = new Array();
    $.getJSON("allItems.json",
         function(data){
             $.each(data.items, 
             function(item){
                 allItems.push(item);
             });
         });
    return allItems;
}

Based on this example: http://api.jquery.com/jQuery.getJSON/

最佳答案

要使 getAllSupportedItems 能夠返回任何項目,AJAX調用需要同步運行。

getJSON translates to the following asynchronous call:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

異步是默認值。因此,您需要明確地將您的請求更改為同步請求:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback,
  async: false
});

另一種方法是重新考慮使用 getAllSupportedItems 的方式並將其轉換為異步實用程序:

function getAllSupportedItems(callback){
    $.getJSON("allItems.json",
         function(data){
             var allItems = [];
             $.each(data.items, 
             function(item){
                 allItems.push(item);
             });
             callback(allItems);
            //callback(data.items); should also work
         });
}

更新

當我最初寫這個答案時,jQuery沒有內置的Deferred支持。今天做這樣的事情更加簡潔靈活:

function getAllSupportedItems( ) {
    return $.getJSON("allItems.json").then(function (data) {
        return data.items;
    });
}

// Usage:
getAllSupportedItems().done(function (items) {
   //you have your items here
});

轉載註明原文: 使用Jquery從本地文件中獲取JSON對象

猜你喜歡