0

ajax呼び出しが成功した後、結果の配列が空になる理由がわかりません。配列に追加されたソースURLからデータを確実に取得していますが、結果はreturnresultステートメントで空になっています。

ご協力いただきありがとうございます。

 function locationSearch(loc) {
    var result = [];
    $.ajax({
        data: 'q=description:' + loc + '*&wt=json&json.wrf=?&fl=*',
        url: 'http://deviis:8080/Locations/select/',
        aSync: false,
        success: function (data) {
            result.push({ value: "Any", data: "*" });
            $.each(data.response.docs, function (i, item) {
                result.push({ value: item.description, data: item.id });                    
            });               
        }
    });
    return result;
}
4

4 に答える 4

0

return result;ajax 関数の外側に場所がsuccessあるため、結果を取得できません。なぜなら、サーバーの応答を取得するのに時間がかかるためですが、その前にlocationSearch()関数resultは空の配列を返します。

AJAX の A は Asynchronous を表します。

これを試すことができます:

success: function (data) {
    result.push({ value: "Any", data: "*" });
    $.each(data.response.docs, function (i, item) {
        result.push({ value: item.description, data: item.id });                    
    }); 
    console.log(result);              
 }
于 2012-05-17T16:52:59.387 に答える
0

配列を構築した直後に、配列を返してみてください。

ajax リクエストには時間がかかる場合があり、リクエストが完了する前に空の配列を返しています。

于 2012-05-17T16:54:01.830 に答える
0

成功のコールバック内でリターン ジョブを実行してみてください。JavaScript プログラミングのクロージャーに常に注意してください。

この投稿に対する John resig の回答が役立つはずです。

于 2012-05-17T16:55:49.273 に答える
0

'success:' を使用する代わりに、jQuery 1.5 以降、遅延プロミスを使用できるようになりました。これにより、このリクエストを .done(); などの関数で非同期に処理できます。

参照: http://api.jquery.com/category/deferred-object/

また、別のスクリプト ファイルから呼び出す場合は、結果を返すのではなく、結果をエコーする必要があります。私が知る限り、これはあなたがしていることではありませんが、同じ問題が発生する可能性があるため、この質問を見つける可能性のある他の人に任せてください.

于 2015-02-13T08:07:19.540 に答える