【问题标题】:jQuery nested .each loop over JSON successjQuery 在 JSON 成功上嵌套 .each 循环
【发布时间】:2014-06-20 17:50:34
【问题描述】:

参考这篇文章 jQuery loop over JSON result from AJAX Success?

返回的 JSON(如 Firebug 中所示):

[
   {"NUMBER":"N02939667","BARCODE":"B000615994","LOAD_FK":"7813","CRO":"VONS"},
   {"NUMBER":"N02939667","BARCODE":"B000607696","LOAD_FK":"8875","CRO":"VONS"}
]

我的带有嵌套 .each 函数的 AJAX:

$.ajax({
        type: "POST",
        url: "get_shipment_by_nnumber.php",
        data: searchItemDataString,
        dataType: 'json',
        success: function(g){
            if ($.isEmptyObject(g[0].LOAD_FK)){
                //validate json returned
            }else{
                  $('.BGresults').empty();
                  $.each(g, function() {
                      $.each(this, function(k, v) {
                          var result = '<strong>     ' + searchItem + ':  (' + v.BARCODE + ') (Reg ID = ' + v.LOAD_FK + ')  (' + v.CRO + ')</strong><br>';
                          $('.BGresults').append(result);
                      });
                  });                   
             };
         }
    })

我的输出在每个 k/v 对上进行迭代,但没有找到值。我猜是因为我有两个对象,每个对象都有 5 k/v 对,我得到 10 个输出。我在 s.o. 上看过类似的帖子。但我只是没有看到对我有意义的答案。有人可以指出我的错误。谢谢。

N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)
N02939667.1-1: (undefined) (Reg ID = undefined) (undefined)

【问题讨论】:

  • 第二个中的v 是值而不是对象。你的第二个$.each() 正在循环传入的对象。所以kv 的值将是k = "NUMBER", v = "N02939667" then k = "BARCODE", v = "B000615994", etc...

标签: javascript jquery ajax json


【解决方案1】:
var data = [
   {"NUMBER":"N02939667","BARCODE":"B000615994","LOAD_FK":"7813","CRO":"VONS"},
   {"NUMBER":"N02939667","BARCODE":"B000607696","LOAD_FK":"8875","CRO":"VONS"}
];

$.each(data, function() { 
    var output = [];

    $.each(this, function(k, v) {
       output.push(k, v);
    });

    console.log(output.join(' '));

});

【讨论】:

    【解决方案2】:

    要使您当前的代码正常工作,您需要在第二个嵌套循环中引用$(this) 而不是this。此外,您会注意到在我的小提琴中我硬编码了 searchItem 的值,因为您没有在示例中提供它。

    fiddle with simulated data

    $.ajax({
            type: "POST",
            url: "get_shipment_by_nnumber.php",
            data: searchItemDataString,
            dataType: 'json',
            success: function(g){
                if ($.isEmptyObject(g[0].LOAD_FK)){
                    //validate json returned
                }else{
                      $('.BGresults').empty();
                      $.each(g, function() {
                          $.each($(this), function(k, v) {
                              var result = '<strong>     ' + searchItem + ':  (' + v.BARCODE + ') (Reg ID = ' + v.LOAD_FK + ')  (' + v.CRO + ')</strong><br>';
                              $('.BGresults').append(result);
                          });
                      });                   
                 };
             }
        })
    

    【讨论】:

    • 我刚刚查看了这个 VS $(this),现在对我来说更有意义了。
    【解决方案3】:

    考虑这个例子:

    data = [
           {"NUMBER":"N02939667","BARCODE":"B000615994","LOAD_FK":"7813","CRO":"VONS"},
           {"NUMBER":"N02939667","BARCODE":"B000607696","LOAD_FK":"8875","CRO":"VONS"}
           ]
    
    //for each value in data => this ("this" is a variable containing an element of data)
    $.each(data, function(){   //in this function you can access "this", and element of data
        $.each(this, function(k,v){  //inner loop iterated over the key-value pairs of "this"
            console.log(k +"==="+v);
            })
    });
    

    这个输出:

    NUMBER===N02939667 
    BARCODE===B000615994 
    LOAD_FK===7813 
    CRO===VONS 
    NUMBER===N02939667 
    BARCODE===B000607696 
    LOAD_FK===8875 
    CRO===VONS 
    

    k取JSON对象中每个key的值,v取对应的值。您实际上似乎想要做的是从 JSON 对象中获取特定值并将其粘贴到一些 HTML 中。这样做:

    $.each(data, function(){  
        var result = '<strong>     ' + searchItem + ':  (' + this.BARCODE + ') (Reg ID = ' + this.LOAD_FK + ')  (' + this.CRO + ')</strong><br>';
        $('.BGresults').append(result);
    });
    

    使用 this.key 访问 JSON 对象中该键的给定值。

    【讨论】:

    • 我很高兴您将其与一个 .each 一起发布,以与 @rooster 答案形成对比。两种方法都有效,让我更容易看到差异。
    猜你喜欢
    • 2015-11-30
    • 2021-11-13
    • 2012-08-15
    • 2011-08-23
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多