0

我正在尝试从使用回调创建的函数中访问对象的值,但遇到了一些麻烦。我还是 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"

还是有更好/更简单的方法来做到这一点?

提前致谢。

4

1 回答 1

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);
    }); 
}
于 2012-06-13T04:27:42.717 回答