2012-04-23 18 views
12

Merhaba Komutta 2 ajax çağrısı var, onlara boş zamanlara asnyc çalıştırmam lazım, ancak ilk bitene kadar beklemek için ikinci desteğe ihtiyacım var.jQuery Async ajax çağrıları tamamlanana kadar bekleyin

$.ajax({ 
     type: "POST", 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
    if (parO2.length > 0) { 
     $.ajax({ 
      type: "POST", 
      url: "getText.asmx/ws_getText", 
      data: parO2, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       /*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/ 
      } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
     }); 

Yani herhangi bir fikir? Teşekkürler

cevap

15

jQuery 1.5+ kullanıyorsanız, bunu gerçekleştirmek için jQuery.when()'u kullanabilirsiniz. Böyle bir şey Sen bu kadar elle bu haddeleme olsaydı, olurdu dönecektir hangi sırayla bilmiyorum

$.when($.ajax("getText.asmx/ws_getText"), 
     $.ajax("getText.asmx/ws_getText")).done(function(a1, a2){ 

    // a1 and a2 are arguments resolved for the 
    // first and second ajax requests, respectively 
    var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ] 
}); 

(yukarıda yaptığımız gibi kısalık için ajax çağrıları kısaltılmış, sadece nesneleri geçmesi) Diğer isteğin durumunu kontrol etmeli ve geri gelene kadar beklemelisiniz.

1

İlk ajax çağrınızın geri araması içinde yer alacak ikinci aramayı yapmanız gerekir. böylece gibi: JavaScript yana

success: function(msg) 
{ 
    alert(msg.d.data); 

    if(par02.length > 0) 
    { 
     // Your 2nd ajax call 
    } 
}, 

istemci üzerinde birden çok iş parçacığı çalıştırmak doesnt belirli koşullar karşılanana kadar, sen iplik engelleyemezsiniz.

+0

ama ikinci çağrı birinci bitmiş oldu sonra, böyle bir şey düşünüyordum başlatılacak çünkü bu uzun yürütme zamanı yapacaktır: ilk çağrı başarıda i true bazı değişkeni ayarlayabilirsiniz ve ikinci aramalar başarı yapabilirim while (variable == false) {wait} ve devam et, ama bunu nasıl yazacağımı bilmiyorum – user1352324

+0

Bir 'wait' yapmanın tek yolu 'setTimeout' olur ve sonra global değişkeninizi kontrol eder. Ancak teknik olarak, bu, çağrının tamamlanmasından sonra zaman aşımının gerçekleşebileceği anlamına gelir, ancak hala beklemektedir. Kullanıcının bir iplik gifini veya sunucunun çalıştığını göstermek için bir şey göstermesi daha iyi olur. – Tejs

0

İşte ikili ajax isteklerini çalıştırmanın başka bir yanıtı. Tejs gibi, kullanıcı başarı yöntemi içinde bir ajax arama ...

afiş Sen başarı yöntemi yeni bir ajax isteği başlatmak zorunda daha iyiyiz devletler yapar .."

Having two $.ajax() calls in one script

1

kullanma jQuery

$.ajax({ 
     type: "POST", 
     async:false, // ** CHANGED ** 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
+0

Cevabınız için teşekkür ederiz. Okunabilirliği geliştirmek için bazı kod formatları ekleyerek onu düzenledim. – vlasits

+0

@vlasits, bunu düşünürken cesur gibi görmüyordu, neler olduğunu açıklamak için bir yorum ile bir düzenleme gönderdim – flyingfisch

İlgili konular