Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jQuery中的延迟调用获取JSON数据_Javascript_Jquery_Json_Apply_Deferred - Fatal编程技术网

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

Javascript 从jQuery中的延迟调用获取JSON数据,javascript,jquery,json,apply,deferred,Javascript,Jquery,Json,Apply,Deferred,我觉得我错过了一些非常简单的事情。请帮忙!我第一次使用jQuery的这一部分 这是我的密码。如何循环遍历do_it返回的每个元素 假设返回值是数组: $.when.apply(do_it[1,2,3]).then(function(data){ $(JSON.parse.(data)).each(function(index, element){ //do stuff }); }, function () {console.log('Failed');<br>});

我觉得我错过了一些非常简单的事情。请帮忙!我第一次使用jQuery的这一部分

这是我的密码。如何循环遍历do_it返回的每个元素


假设返回值是数组:

$.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 json = JSON.parse(data);
$(json).each(function(index,element){
    //do stuff
    alert("index: " + index + " element: " + element );
});
$.getJSON返回一个承诺对象: 这样,您就可以分别附加done、fail和always函数来运行。使用它,您可以将代码格式化为

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");
});
如果是数组或每个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");
});

在本例中,我修复了数据中的所有错误,并使用延迟对象复制程序的功能

数据是包含多个对象的数组。代码循环遍历数组对象,并从每个对象中选择要添加到表中的值。注意,我倾向于使用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>');
});

我希望这对你有用。

对不起,我的打字错误。这就是我的代码中的内容……修正了。JSON看起来像什么?这里发生了很多奇怪的事情。你能用简单的英语详细描述一下你想做什么吗?do_it[1,2,3],这不是do_it[1,2,3]吗?{ID:1,L_Name:Jones,F_Name:Jan,Email:jjones@email.com,电话号码:xxx.xxx.xxxx,机构:IT,部门:3,备注:秘书:0}{ID:3,L_姓名:史密斯,F_姓名:克里斯托弗,电子邮件:email@gmail.com,电话号码:,机构:IT,部门:18,备注:,秘书:0{ID:4,L_姓名:怀特,F_姓名:Amanda,电子邮件:white@email.com,电话号码:,机构:UT,部门:25,备注:,秘书:0}尝试了以下操作:数据[i]。L_名称未定义,数据[i]也未定义.L_Name是我必须在您发布的JSON中修复的内容之一。它可能与下划线有关。您是否返回了任何数据?我将在第一次响应中列出JSON对象,其中显然有一些拼写错误。如果我只发送一个数组元素并返回一个简单的JSON对象,我可以解析它,但当我发送arr时ay和get back一个复杂的JSON对象数据是未定义的,无论我怎么尝试-我也尝试过!-解析它…所以如果你真的这么做了,你得到了一些你可以解析回来的东西,但你确实做到了[1,2,3]你不知道?安迪-事实证明我的json格式不正确。事实证明我一直在看一个旧版本的程序,当我看到当前版本时,我发现了问题并修复了它。嘎!谢谢你的努力。-我认为解析和开放paren之间有一个额外的点。但它不适用于我正在使用的阵列json返回。我认为您的响应格式不正确;在您提供的示例中,缺少开始括号和结束括号,以及数组元素之间的逗号。问题是,尽管获得getJSON返回,但数据中没有显示任何内容,因此此操作失败。我正在向php程序发送一个数组,并获得一个JSON响应。当e是数组中的一个元素和一个JSON对象,但当我发送了一个多元素数组后返回一个复杂的JSON对象时就不是了……你有没有一个现场演示,让每个人都能看到?你认为什么是复杂的JSON对象。你确定id应该是一个数组,而不仅仅是一个id,例如一个数组元素。它是ounds就是这样。对不起我的术语:我所说的复杂对象是一个编码的关联数组。php为每个id创建一个关联数组,然后json_对整个数组进行编码并将其发送回。当只有一个id时,在编码之前数组中只有一行,我通过数据[0]访问它,当有更多行时,我就无法访问它。因此,看起来我必须以不同的方式返回数据,或者找到另一种解析数据的方法。您可以尝试$.parseJSON jQuery.parseJSON,但如果返回的数据与您帖子中的注释相同,其中包含{ID:..}{ID:..}{ID:..}没有错误,它将抛出一个错误。
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");
});
$.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>');
});