【问题标题】:loop a recieved json string to get values by jquery循环接收到的 json 字符串以通过 jquery 获取值
【发布时间】:2013-10-21 16:09:45
【问题描述】:

我正在尝试解析从$.post() 返回的数据。

[{"id":"1","text":"USD"},
 {"id":"2","text":"CNY"},
 {"id":"3","text":"PHP"},
 {"id":"4","text":"AUD"},
 {"id":"5","text":"SGD"},
 {"id":"6","text":"JPY"}]

使用这种方法Jquery, looping over a json array

我做了这样的事情:

$.post(
    base_url+'cgame/currency',
    { gameID: gameID },
    function(data) {
        $(this).html();
        $.each(data,function(idx, obj) {
            $(obj).each(function(key, value) {
                console.log(key + ": " + value);
            });
        });
    }
);

但它给了我错误:

未捕获的类型错误:无法使用“in”运算符在[{"id":"2","text":"CNY"},{"id":"3","text":"PHP"},{"id":"4","text":"AUD"},{"id":"5","text":"SGD"},{"id":"6","text":"JPY"}] 中搜索“120”

我也试过了:

$.post(
    base_url+'cgame/currency',
    { gameID: gameID },
    function(data) {
        $(this).html();
        $(data).each(function(idx, obj) {
            $(obj).each(function(key, value) {
                console.log(key + ": " + value);
            });
        });
    }
);

但它也给了我错误:

未捕获的错误:语法错误,无法识别的表达式:[{"id":"1","text":"USD"},{"id":"6","text":"JPY"}]

我应该怎么做?

【问题讨论】:

  • 我猜您需要先将 JSON 字符串(数据)解析为 JSON 对象,然后再对其进行迭代。尝试 JSON.parse(data) 并对其进行迭代。

标签: javascript jquery


【解决方案1】:

您的数据以数组的形式出现,因此您需要遍历每个索引,然后获取值。所以你可以替换这个:-

 $(obj).each(function(key, value) {
     console.log(key + ": " + value);
 });

与:-

 $.each( obj, function( key) {
     console.log( obj[key].id + ':' + obj[key].text);
 });

或者你可以这样做:-

 $.each( obj, function( key, value ) {
     console.log( value.id + ':' + value.text);
 });

key 是数组的索引。它将返回 0,1,2..

【讨论】:

  • 是的,谢谢.. 你的第二个答案也是我从 eggward 和 fibbe 的建议中发现的。
【解决方案2】:

我认为传递给您的成功回调函数的参数是字符串类型。将其更改为:

 function(data) {
var parsedData = JSON.parse(data);
    $(this).html();
    $.each(parsedData ,function(idx, obj) {
        $(obj).each(function(key, value) {
            console.log(key + ": " + value);
        });
    });
}

【讨论】:

  • 感谢您的努力:我已经根据您的回答和我帖子上方的评论找到了答案。
  • 这给出了 0: [object Object] grid.js:159 0: [object Object] grid.js:159 0: [object Object] grid.js:159 0: [object对象] grid.js:159 0: [对象对象] grid.js:159 0: [对象对象]。没有错误,但值仍然不正确。所以我所做的是删除代码的第二个循环。
【解决方案3】:
 function(data) {
    var value = JSON.parse(data);
    $.each(value ,function(idx, obj) {
       console.log("id : "+obj.id+" "+text:"+obj.text);
    });
 }

【讨论】:

    【解决方案4】:

    试试这个

    $.post(base_url+'cgame/currency',{ gameID: gameID },
     function(data) {
        $(this).html(); //<-- becareful $(this) might not be the element you think it is
        $.each(data,function(idx, obj) {
            console.log( "id : " + obj.id);
            console.log( "text: " + obj.text);
       });
     },'JSON');
    

    【讨论】:

    • 对不起,但我的帖子仍然出现第二个错误。但感谢您的帮助:D
    猜你喜欢
    • 2023-03-20
    • 2011-07-24
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2012-12-08
    • 2013-11-23
    相关资源
    最近更新 更多