jQuery访问对象

时间:2012-06-13 04:21:06

标签: javascript jquery object multidimensional-array

我正在尝试从我使用回调创建的函数中访问对象的值,但是遇到了一些麻烦。我还是jQuery / javascript的新手。

我按如下方式调用该函数:

siteDeps(id,function(data){
    $.each(data,function(key,val) {
        console.log(key);
        console.log(val);
    });
});

该函数从XML数据运行5个ajax查询,并将数据作为多维对象返回;这是一段摘录,展示了它的内容:

function siteDeps(id,callback) {
    var result = { 
        sitecontactid : {}, 
        siteaddressid : {}, 
        sitephoneid : {}, 
        contactaddressid : {}, 
        contactphoneid : {} 
    };

...//....

    var url5 = decodeURIComponent("sql2xml.php?query=xxxxxxxxxxx");             
    $.get(url5, function(data){
        $(data).find('ID').each(function(i){
            result.sitephoneid[i] = $(this).text(); 
        }); 
    }); 
    callback(result);
}

console.log输出显示:

sitecontactid
Object
    0: "2"
    1: "3"
    __proto__: Object
siteaddressid
Object
    0: "1"
    __proto__: Object
sitephoneid
Object
    0: "1"
    1: "5"
    2: "54"
    __proto__: Object
contactaddressid
Object
    0: "80"
    __proto__: Object
contactphoneid
Object
    0: "6"
    __proto__: Object

如何以我可以使用的格式提取回调数据,例如sitephoneid:“1”,“5”,“54”

或者有更好/更简单的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

要获得该输出,您可以使用Javascript“join”函数:

siteDeps(id, function(data){
    console.log(JSON.stringify(data));

    var values = [];
    for (var prop in data.sitephoneid) {
        values.push(data.sitephoneid[prop])
    }
    var str = '"' + values.join('","') + '"';
    console.log(str);
    // output: "1","5","54"
});

function siteDeps(id,callback) {
    var result = { 
        sitecontactid : {}, 
        siteaddressid : {}, 
        sitephoneid : {}, 
        contactaddressid : {}, 
        contactphoneid : {} 
    };

...//....

    var url5 = decodeURIComponent("sql2xml.php?query=xxxxxxxxxxx");             
    $.get(url5, function(data){
        $(data).find('ID').each(function(i){
            result.sitephoneid[i] = $(this).text(); 
        }); 

        // callback needs to go inside the ajax call, because it's asynchronous
        callback(result);
    }); 
}