2017-08-17 5 views
1

失敗した場合にajaxコールへの参照を保存し、後でコールを再試行できるかどうかを確認しようとしています。私は、次のことを試してみました:SuccessハンドラとFailureハンドラの参照を使用してAjaxコールを再試行する方法

DoOtherStuffは次のように参照を使用して、AJAX呼び出しを試み
$.ajax({ 
    url: "controller/action", 
    data: { 
     params: "here" 
    } 
}) 
.success(function (response) { 
    DoStuffHere(); 
}) 
.fail(function (error) { 
    ajaxRef = this; 
    DoOtherStuff(); 
}) 

function DoOtherStuff() { 
    if(ajaxRef) 
    { 
     $.ajax(ajaxRef); 
    } 
} 

明らかに、これは私が達成しようとしているものを証明するために単純化されます。

これは実際にはajax呼び出しを行うようですが、問題は、呼び出しの属性のsuccessまたはfailへの参照を保持していないようです。呼び出しが正常に戻ったときに、それはこの質問への答えのための私の検索ではDoStuffHere();

を呼び出すことはありません、私はあなたがsuccessfail関数の内部$.ajax(this)を呼び出す場合、それが動作することを言うのコードを見つけましたが、私の中に再試行する前に、他の関数やajaxコールを実行する必要があります。

successfailがajaxコールを参照して運ばれるようにする方法はありますか?

答えて

1

succes/failureハンドラをajaxリクエストオブジェクト自体に付けてみましたか?このような 何か:これは働いていなかった理由を、私はちょうど考え出し

var ajaxRef = { 
    url: "controller/action", 
    data: { 
     params: "here" 
    }, 
    success: ajaxSuccess, 
    error: ajaxFailure 
} 

$.ajax(ajaxRef) 

function ajaxSuccess(response){ 
    DoStuffHere(); 
} 
function ajaxFailure(error){ 
    DoOtherStuff(); 
} 

function DoOtherStuff() { 
    if(ajaxRef) 
    { 
     $.ajax(ajaxRef); 
    } 
} 
+1

あなたの入力と同時に私の答えを入力していたようです。だから私は答えとしてあなたを受け入れた。ありがとうございました! –

1

。なぜ私は.success().fail()ハンドラをajaxに使うのを学んだのか分かりませんが、明らかにそのような参照をしないでください。私は、次のコードを変更するときに:

$.ajax({ 
    url: "controller/action", 
    data: { 
     params: "here" 
    }, 
    success: function (response) { 
     DoStuffHere(); 
    }, 
    error: function (error) { 
     ajaxRef = this; 
     DoOtherStuff(); 
    } 
}) 

を次にこれは実際に動作します。この

function DoOtherStuff() { 
    if(ajaxRef) { 
     $.ajax(ajaxRef); 
    } 
} 

希望はそこに誰かに便利です!

+0

@Manuel Ottoは私と同じ結論に達しました。ありがとうございました! –

関連する問題