PHP json_encode结果和jQuery

时间:2010-01-06 22:36:49

标签: php jquery json

我正在尝试从我的数据库中取出一个jSON编码的字符串并循环遍历这些项目,但我遇到了一些困难。这是数据库中的字符串:

["volunteers","seat_dedication_program","memberships"]

以下是代码:

//Looks for _checkbox when looping through my database fields (object dbVals) and turns it into a true jQuery array if it finds it.
if( key.search(/_checkbox/i) > 0 ) var arr = $.makeArray(dbVals[key]);

//If it is an array, loop through the array values and show them
if($.isArray(arr)==true){
    $.each(arr, function(i, n){
        alert(i + " : " + n);
    });
}

我想要的是:

//alert
0 : volunteers
//alert
1 : seat_dedication_program etc...

我得到的是:

//alert
0 : ["volunteers","seat_dedication_program","memberships"]

我想我已经包含了所有相关数据。任何人都可以帮我弄清楚为什么会这样吗?

感谢。

2 个答案:

答案 0 :(得分:1)

使用$ .makeArray(..)给你一个数组,其中唯一的元素是你给它的字符串。您需要将字符串解析为JavaScript对象。使用JSON2.js library进行解析,然后您的代码看起来就像这样。

var arr = JSON.parse(dbVals[key]);

if($.isArray(arr)==true){
    $.each(arr, function(i, n){
        alert(i + " : " + n);
    });
}

答案 1 :(得分:0)

只需使用常规for循环:

for (var i=0; i<arr.length; i++) {
    var n = arr[i];
    alert(i + " : " + n);
}

或对于大型数组,略微优化:

for (var i=0,l=arr.length; i<l; i++) {
    var n = arr[i];
    alert(i + " : " + n);
}

或者如果你真的讨厌循环:

Array.prototype.each = function (callback) {
    for (var index=0,l=this.length;index<l;index++) {
        var item = this[index];

        // index is second arg since it's optional
        callback(item,index);
    }
}

arr.each(function(n,i){
    alert(i + " : " + n);
});

但是我建议使用for循环以避免与库修改发生冲突,或者当Firefox突然决定为数组实现自己的each方法时(某些库已经被这种方法所困扰)。