0

次のコードがありますが、コードを実行すると未定義として返されます。なぜこれが起こるのか分かりません!

function loadServiceXml(){
    $.get("/xml/ServiceUrls.xml", function(xml){
        return $.xml2json(xml);
    });
}

function getMajorGroups(){
    //get the base element to be created.
    var jsonXmlObject;
    jsonXmlObject = loadServiceXml();
    var element = $('.item-group-button').first();

}

応答は問題なくxmlファイルを返します.firebugを使用して変数の値を壊してチェックすると、未定義として返されます.

4

2 に答える 2

1

$.get非同期操作です。したがって、実際には、メソッドは明示的に何も返さないため、loadServiceXml()メソッドが返されます。undefined渡す関数内で意図した作業を行う必要があります$.get

function loadServiceXml(){
    $.get("/xml/ServiceUrls.xml", function(xml){
        // Process the response here
    });
}   
于 2013-04-24T05:58:25.927 に答える
1

コールバックのはreturnから$.get値を返しませんloadServiceXml。その関数は何も返しません! さらに、同期呼び出しとして処理しようとしている非同期呼び出しがあります。

代わりに、コールバック関数を loadServiceXml に渡して、値が返されたときに返された値で呼び出されるようにしてください。

function loadServiceXml(callback){
    $.get("/xml/ServiceUrls.xml", function(xml){
        callback($.xml2json(xml));
    });
}

function getMajorGroups(){
    //get the base element to be created.
    loadServiceXml(function(jsonXmlObject) {
        var element = $('.item-group-button').first();
    }));
}

ここでは、無名関数を に渡します。この関数loadServiceXmlは呼び出され、XML オブジェクトが使用可能になるとパラメータとして渡されます。したがって、呼び出しが完了すると、実行は の無名関数に戻りますgetMajorGroups

于 2013-04-24T06:01:32.957 に答える