一尘不染

使用Jquery从本地文件获取JSON对象

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;
}

基于此示例:http :
//api.jquery.com/jQuery.getJSON/


阅读 264

收藏
2020-07-27

共1个答案

一尘不染

为了getAllSupportedItems能够返回任何项目,AJAX调用需要同步运行。

getJSON 转换为以下异步调用:

$.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
});
2020-07-27