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 の「結合」関数を使用できます。

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 に答える