从jQuery中的延迟调用中获取JSON数据

时间:2014-02-26 14:08:47

标签: javascript jquery json apply deferred

我觉得我错过了一些简单的东西。请帮忙!我第一次使用这部分jQuery ....

这是我的代码。如何遍历do_it返回的每个元素?

function do_it(a){
  return $.getJSON('url', {mode: 'get_array', id: a}); // returns JSON object
};

$.when.apply(do_it[1,2,3]).then (function(data){
  // how to get each element returned by do_it() here?
}, function () {console.log('Failed');<br>});

3 个答案:

答案 0 :(得分:0)

$.getJSON会返回一个承诺对象:http://api.jquery.com/jquery.getjson/
有了它,您可以分别附加donefailalways函数。然后,您可以将代码格式化为。

function do_it (id) {
    return $.getJSON(url, {
        mode: 'get_array',
        id: id
    });
}

do_it([1, 2, 3]).done(function (data) {
    for (var key in data) {
        console.log(key, " = ", data[key]);
    }
}).fail(function () {
    console.log("Failed");
});

我不确定你想要传递给do_it的是什么,如果它是数组,或者每个id分开,如果是后者,你可以这样做:

$.each([1, 2, 3], function (id) {
   do_it(id) // same stuff as above

修改:根据您的评论,这是一个建议,虽然不是最佳表现。

var data = [];

$.when.apply($.map([1,2,3], function (id) {
    return do_it(id).done(function (d) {
        data.push(d[0]);
    });
}).done(function () {
    for (var d in data) {
        console.log(d);
    }
}).fail(function() {
    console.log("Failed");
});

答案 1 :(得分:0)

在此示例中,我修复了数据中的任何错误,并使用deferred对象复制程序的功能。

Fiddle

data是一个包含许多对象的数组。代码循环遍历数组对象,并从每个对象中选取值以添加到表中。请注意,我倾向于使用array.join()而不是字符串连接来构建HTML - YMMV。

$.when(do_it()).then(function (data) {
    var html = [];
    html.push('<table>');
    for (var i = 0, l = data.length; i < l; i++) {
      var row = [];
      row.push('<tr>');
      row.push('<td>' + data[i].ID + '</td>');
      row.push('<td>' + data[i].L_Name + '</td>');
      row.push('<td>' + data[i].F_Name + '</td>');
      row.push('<td>' + data[i].Email + '</td>');
      row.push('<td>' + data[i].Department + '</td>');
      row.push('</tr>');
      html.push(row.join(''));
    }
    html.push('</table>');
});

我希望你对它有用。

答案 2 :(得分:-1)

假设返回的值是一个数组:

$.when.apply(do_it[1,2,3]).then(function(data){
   $(JSON.parse.(data)).each(function(index, element){
   //do stuff
   });
}, function () {console.log('Failed');<br>}); 

编辑:

从您的评论中,我们假设:

var data = '[{"ID":1,"L_Name":"Jones","F_Name":"Jan","Email":"jjones@email.com","Telephone_No‌​":"xxx.xxx.xxxx","Institution":"IT","Department":"3","Notes":"","Secretary":0},{"I‌​D":3,"L_Name":"Smith","F_Name":"Christopher","Email":"email@gmail.com","Telephone‌​_No":"","Institution":"IT","Department":"18","Notes":"","Secretary":0},{"ID":4,"L_‌​Name":"White","F_Name":"Amanda","Email":"white@email.com","Telephone_No":"","Inst‌​itution":"UT","Department":"25","Notes":"","Secretary":0}]';

注意我添加了数组的开始和结束括号[...]以及元素之间的逗号。

然后循环遍历数组:

var json = JSON.parse(data);
$(json).each(function(index,element){
    //do stuff
    alert("index: " + index + " element: " + element );
});