-2

私はこのようなものを持っています:

$.ajax({
    type: 'GET',
    url: my_url,
    success: function(data) {

        $('#some_div').data('test', 'This is a test');

    }
});

次に、成功コールバックの外で、次のようなテスト変数にアクセスしようとしました

console.debug($('#some_div').data('test'));

しかし、これは戻りますundefined

助けてください

ありがとうございました

4

3 に答える 3

0

$.ajax .done()メソッドとメソッドに慣れる必要があり.fail()ます。

jqXHR.done(関数(データ、textStatus、jqXHR) {}); 成功コールバック オプションの代替構造である .done() メソッドは、非推奨の jqXHR.success() メソッドを置き換えます。実装の詳細については、deferred.done() を参照してください。

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {}); エラー コールバック オプションの代替構造である .fail() メソッドは、非推奨の .error() メソッドを置き換えます。実装の詳細については、deferred.fail() を参照してください。

詳細はこちら!

于 2013-08-26T16:49:40.273 に答える
0

成功関数は、リクエストが正常に返された後に発生します。

$.ajax 呼び出しを行った直後、つまり検査している値が ajax 成功コールバックによって設定される前に、console.debug 行が発生します。

  1. $('#some_div').data('test')未定義です
  2. ajax呼び出しが行われる
  3. $('#some_div').data('test')はまだ定義されていません。
  4. console.debug 行が実行されます
  5. $('#some_div').data('test')まだ定義されていません...
  6. ajax 呼び出しが正常に返されました。$('#some_div').data('test')今定義されます

はい、これは非同期ロジックがどのように機能するかの最も単純な例であるため、コメントが表示されます。

于 2013-08-26T16:49:47.573 に答える
0

結果をグローバル変数に保存する必要があります。つまり、次のようになります。

var globalVariable;
$.ajax({
    type: 'GET',
    url: my_url,
    success: function(data) {

        $('#some_div').data('test', 'This is a test');
        globalVariable = data;
    }
});

グローバル スコープに格納することは最善の方法ではないため、グローバル スコープの汚染を避けるために、自己実行匿名関数でラップすることをお勧めします。

(注: もっと良い方法がありますが、複雑になりすぎないように注意してください)

于 2013-08-26T16:50:07.747 に答える