0

重複の可能性:
jQueryグローバル変数の問題

jQuery AJAX呼び出しを行っており、応答を変数に保存したいと思います。ただし、この変数には、AJAX呼び出し関数の外部の応答の値がありません。AJAX呼び出し関数の外部で応答を取得するにはどうすればよいですか?

例:

var responseText = '';
$.ajax({
    url: 'clients_handler.php',
    type: 'post',
    data: { action: 'check_email', email: email },
    success: function(data) {
        responseText = jQuery.parseJSON(data);
    }
});
console.log(responseText);

したがって、私の例responseTextでは、AJAX関数の前に設定されているように空になります。この変数をAJAX応答値で設定するにはどうすればよいですか?

4

2 に答える 2

1

クロージャー内にあるため、変数を希望どおりに保存することはできません。最善の方法は、リクエストが完了した後に実行される関数に応答データを渡すことです。次に例を示します。

//code
$.ajax({
    url: 'clients_handler.php',
    type: 'post',
    data: { action: 'check_email', email: email },
    success: function(data) {
        responseHandler(data);
    }
});


function responseHandler(data){
    console.log(data);
}
于 2013-01-10T14:51:11.513 に答える
1

簡単な答えは、ajax が非同期で起動することです。本質的に、これは ajax コードがいつ完了するかわからないことを意味するため、への呼び出しの$.ajaxのコード行は、終了前に実行される可能性があります$.ajax(必ずしもそうとは限りません)。これが、ajax のコールバックが必要な理由です。

jQuery.ajax1 つの解決策は、オプションを使用して ajax リクエストを同期させることasync: falseですが、これはおそらく望ましくありません。

responseText真の解決策は、コールバックを適切に使用することです。関数内で必要なすべての作業を行いsuccess:ます。

すべてのコードを 1 か所にまとめるのが好きではありませんか? jQuery は、Deferred を作成してjqxhr実装するのに十分なほど優れていました。

var jqxhr = $.ajax({url: url, data: data});
//thousands of lines of code here
$.when(jqxhr).done(function (responseText) { console.log(responseText); });
于 2013-01-10T14:51:51.787 に答える