1

これが重複している場合は申し訳ありませんが、以前の投稿で満足のいく答えが見つかりませんでした.

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: function(data) {
            // Data received here
        }
    });
});

[また]

someFunction() {
    return $.ajax({
        // Call and receive data
    });
}

var myVariable;

someFunction().done(function(data) {
    myVariable = data;
    // Do stuff with myVariable
});

上記のコードは問題なく動作します。ただし、この ajax リクエストはページの読み込み時に行われるため、後でこのデータを処理したいと考えています。コールバック内に処理ロジックを含めることができることはわかっていますが、そうしたくありません。呼び出しの非同期性のため、グローバル変数への応答の割り当ても機能しません。

上記の両方の方法で、「データ」は成功コールバックまたは完了コールバックのいずれかに限定されており、可能であればこれらの外でアクセスしたいと考えています。これは以前は jQuery の「async:false」フラグで可能でしたが、jQuery 1.8 では廃止されました。

任意の提案をいただければ幸いです。ありがとうございました。

4

2 に答える 2

3

コールバックを通常の関数に「アウトソーシング」できるので、好きな場所に配置できます。

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: yourOwnCallback
    });
});

他の方法でコールバックを定義できます

function yourOwnCallback(data) {
  // Data received and processed here
}

これはオブジェクトメソッドでも可能です

于 2012-08-15T10:16:46.710 に答える
1

この解決策は考えられないかもしれませんが、私はそれが役立つことを願っています。

  • コールバック時に変数を設定します。
  • データを処理する必要がある場合は常に、変数が設定されているかどうかを確認し、設定されていない場合は何とか待機します。

試す:

$(document).ready(function(){
    var myVar = false;
    $.ajax({
        url: 'ajax/test.html',
        success: function(data) {
            myVar=data;
        }
    });

    someFunction(){ //this is invoked when you need processing
        while(myVar==false){}
        ... do some other stuff ..
    }
});

または

someFunction(){
    if(myVar==false){
        setTimeout(someFunction(),100); //try again in 100ms
        return;
    }
.. do some other stuff ..
}
于 2012-08-15T10:20:30.020 に答える