1

JavaScript イベントのタイミングに問題があります。私が抱えている問題は、コードの別の部分が完了する前に、コードの一部が実行されているように見えることです。後者のコードが始まる前に、最初のコードが終了することを確認する必要があります。初期コードは次のとおりです。

function(){     
    myLoop();  //this needs to complete before the call to myMethod below 
    $.ajax({
    url: sURL + "myController/myMethod",
    success: function() {       
    $.msg("My Success Message",{live:10000});
    error: function(){
    $.msg("My Error Message",{live:10000});
});
}

そして、レコードをループしてデータベースに挿入するコードは次のとおりです。

function myLoop(){
$('input[name=c_maybe].c_box').each(function(){
if( $(this).prop('checked') ){ 
    var rn = $(this).prop('value'); 
    $.ajax({
        url: sURL + 'myController/myInsert',
        type:"POST",
        dataType: 'text',
        data: {'rn': rn},
        success: function(data) {
            //not sure what to do on success.
        }
    });
} 
}); 
} 

発生していると思われる問題は、データベースへのすべてのレコードの挿入が完了するmyController\myMethod前にへの呼び出しが発生していることです。myLoop

完全に終了myController\myMethodするまで呼び出されないように、このコードを再設計する方法を誰かが提案できますか?myLoop

ありがとう。

4

3 に答える 3

2

jQueryに追加された$.when関数を利用できます。

次のようになります。

   $.when(ajaxFunction1(), ajaxFunction1()).done(function(response1, response2){
    // when the function calls are done this code here will be executed -> the response will be passed as parameters corresponding to the functions -> response1, response2
   });

または、ajax 関数内で「beforeSend」を使用することもできます。

$.ajax({
   beforeSend: function(){    
     alert("doing stuff before the ajax call ...");    
   },
   success: function(){    
    alert("Whoa!");    
   }
 });
于 2013-01-30T03:39:14.477 に答える
2
function myLoop() {
   var jqxhrs = [];
   if( $(this).prop('checked') ){ 
       var rn = $(this).prop('value'); 
       jqxhrs.push($.ajax({...
   }
   return jqxhrs;
}

function () {
   $.when.apply(undefined, myLoop()).done(function () {
      $.ajax({
         url: sURL + "myController/myMethod",
         ...
   });
}

$.when.apply$.whenはajax リクエストの配列を呼び出すために使用されるため.done、それらがすべて完了するまで呼び出されません。

于 2013-01-30T03:40:26.147 に答える
-1

ajax 呼び出しを同期させることができます。そうすれば、ajax 呼び出しが返されるまで実行がブロックされます。

$.ajax({
    url: sURL + 'myController/myInsert',
    type:"POST",
    dataType: 'text',
    data: {'rn': rn},
    async: false,
    success: function(data) {
        //not sure what to do on success.
    }
});
于 2013-01-30T03:47:31.103 に答える