2016-04-04 17 views
-1

jqueryのalways関数についての簡単な質問があります。Jquery always functions

私のコードでは私はPOST要求を持っていますので、完了するまで待つようにしてから、応答を出力してくれるalways関数を使用しています。

ajax_send.always(function(){ 
    console.log(ajax_send); 
} 
console.log("ajax done"); 
:私の質問は、私はPOSTリクエストの完成後に実行されるように望んでいるいくつかのコードを持っている場合、私は、このようなループの外側に配置した場合 alwaysが行われる前に、それが実行さだろうということです

ajax_send.always(function(){ 
    console.log(ajax_send); 
} 

私はいつもalwaysの機能を待っています。

私はいくつかのPOSTリクエストをしていることになりますので、私はこれをやっている、と私は常に内部でそれを維持する必要がある場合、それはこのように、非常に醜い見てみましょう:私は置くことができる場合は

ajax_send.always(function(){ 
    console.log("1"); 
    ajax_send.always(function(){ 
     console.log("2"); 
     ajax_send.always(function(){ 
      console.log("3"); 
     } 
    } 
} 

それの後と限り、私はそれがまだ要求が行われた後に実行されますalways内部の何かを持っているとして、このように、非常に見栄えcode'll:

ajax_send.always(function(){ 
    console.log("1"); 
}  
ajax_send.always(function(){ 
    console.log("2"); 
}  
ajax_send.always(function(){ 
    console.log("3"); 
} 

編集:私のコードは、上記の欠けている実際の呼び出し、.alwaysは常にPOST要求の後になります。

+0

をjQueryのwhen()機能を使用してに見て、あなたが求めているものに似た何かをする

作られた... – epascarello

+0

'always'の後ではなく' always'の前ではないことを意味しました – Rohinder

+0

そのために作られた関数ではありませんか? – John

答えて

0

alwaysのコードは、その特定のajax呼び出しが完了した後に実行されます。

ajax_send.always(function(){ 
    console.log("1"); 
}  
ajax_send.always(function(){ 
    console.log("2"); 
}  
ajax_send.always(function(){ 
    console.log("3"); 
} 

は常に1,2,3をプリントアウトすることが保証されることはありません。あなたのAJAX呼び出しが返される順番はとてもこれを行うことを決定することはできません。それを行うための唯一の方法はである:

ajax_send.always(function(){ 
    console.log("1"); 
    ajax_send.always(function(){ 
     console.log("2"); 
     ajax_send.always(function(){ 
      console.log("3"); 
     } 
    } 
} 

この理由はajaxコール(その名前が示すように)が非同期であるということです。つまり、コードの実行をブロックせず、その代わりにバックグラウンドで作業を行います。 alwaysの目的は、その「バックグラウンド」機能が何をしているのかを待ってから、必要なコードを実行することです。これにより、物事が期待どおりの順序で実行されます。あなたはいつも外にコンソールを配置する場合Ajax呼び出しがある前に、それが実行されます

+0

くそったれ。私はそれがしたいと望んでいた:(助けてくれてありがとう! – Rohinder

0

使用when()

var a = $.ajax(...), 
    b = $.ajax(...), 
    c = $.ajax(...); 

$.when(a, b, c).done(function() { 
    console.log("Ajax calls are done"); 
});