1

getおよびgetJSONに対してjquery呼び出しを行っていますが、コールバック関数の外部で戻り値にアクセスできません。返されたデータにアクセスするにはどうすればよいですか?

        var firstid;
        var nextid;

    $.get(callUrl, function(data) {  // call to add node
         var n = data.indexOf("id-");
         var m = data.indexOf("id-");
         firstid = data.substr(n+3,m - (n+3));
         nextid = data.substr(m+3);

             alert("firstid:" + firstid);  // returns correct value
    });

        alert("firstid:" + firstid);  // returns undefined for firstid

関数の外でfirstidを取得するにはどうすればよいですか?

4

3 に答える 3

6

すべてのAJAX呼び出しは非同期です

したがって、コールバックを使用する必要があります。それ以外のものはすべて戻りundefinedます。

$.get(callUrl, function(data) {  // call to add node
     var n = data.indexOf("id-");
     var m = data.indexOf("id-");
     firstid = data.substr(n+3,m - (n+3));
     nextid = data.substr(m+3);

     doSomethingWithFirst(firstid);
});

function doSomethingWithFirst(f)   {
     //NOW do something
}
于 2012-06-22T13:12:46.713 に答える
1

実行の瞬間にそれが実際にあるので、2番目alert("firstid:" + firstid);は戻ります。undefinedundefined

1つ目は、取得が終了alert("firstid:" + firstid);した後に起動するため、期待される結果を返します$.get

AJAX-非同期JavaScriptおよびXMLの略です。非同期イベントは、メインプログラムフローとは独立して発生するイベントです。リクエストを同期に設定することはできますが、お勧めしません

5秒の遅延でタイムアウトに秒をラップした場合alert("firstid:" + firstid);、期待される結果が表示されます。

setTimeout(function() { alert("firstid:" + firstid); }, 5000);

または、1秒の遅延で1秒をラップalert("firstid:" + firstid);して、最終的に期待される結果を表示することもできます。

var callback_interval = setInterval(function() {
    if(typeof(firstid) == 'undefined') return;
    clearInterval(callback_interval);
    alert("firstid:" + firstid);
}, 1000);

ただし、成功コールバックで直接、$.getまたはその成功コールバック内の関数呼び出しを介して変数を操作するのが最善です。

于 2012-06-22T13:13:21.610 に答える
0

これは、非同期で行われるためです(AJAXの基本原則の1つ)。asyncをfalseに設定するか、他のコールバック構造を使用して、get呼び出しから返された値を使用できます。

于 2012-06-22T13:13:04.670 に答える