1

JSONを返す関数があります。呼び出し元の関数で返されたデータを確認すると、未定義であることがわかりました。

私が考えることができる唯一のことは、ajax が非同期であり、データが返されるのを待たなかったことです。これが、最初のアラートの前に 2 番目のアラート ボックスがトリガーされた唯一の理由である可能性があります。

$.get( '/search/s/g/' , { 'q' : query } , function(data) {
    var result = $.parseJSON(data);
    if ( result.length < 10 ) { 
        data2 = extendSearch(query);
        alert("second"); // This got triggered first.
    }
    populateSearchResult(result);
});

function extendSearch(q) {
    $.get('/search/s/f/', { 'q': q }, function(data) { 
         alert("first"); // This got triggered as the second alert box
         return data;
    });
}

これをどのように解決しますか?

4

1 に答える 1

1

データを返さないでくださいexpandSearch。成功のコールバック内で必要なことを行います。

function expandSearch(q) {
    $.get('/search/s/f/', { 'q': q }, function(data) { 
         alert("first"); // This got triggered as the second alert box
         // do something with the data here
         // modify dom or w/e
    });
}
于 2013-11-06T18:05:41.530 に答える