2012-04-23 11 views
12

Witam Mam 2 wywołania ajax w moim skrypcie, potrzebuję ich uruchomić asnyc do wolnego czasu, ale potrzebuję sekundy, aby poczekać, aż pierwszy jest skończony.jQuery Poczekaj, aż asynchroniczne wywołania ajax zostaną zakończone

$.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"); 
     } 
     }); 

Jakieś pomysły? Dzięki

Odpowiedz

15

Jeśli używasz jQuery 1.5+, możesz użyć jQuery.when(), aby to osiągnąć. Coś podobnego (skrócona Ajax połączeń dla zwięzłości, po prostu przekazać obiektów jak robisz powyżej)

$.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 ] 
}); 

nie wiesz w jakiej kolejności wrócą więc jeśli toczyły się to ręcznie, byś trzeba sprawdzić stan drugiej prośby i poczekać, aż powróci.

1

Musisz połączyć drugie połączenie, aby było zawarte w oddzwanianiu twojego pierwszego wywołania ajax. Tak:

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

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

Ponieważ JavaScript nie robi prowadzony w wielu wątków na kliencie, nie można zablokować wątek, dopóki nie zostaną spełnione pewne warunki.

+0

ale uczyni to czas realizacji dłużej, ponieważ uruchomiona zostanie druga rozmowa po pierwsze był gotowy, myślałem o czymś takim: w pierwszym sukcesem rozmowy mogę ustawić jakąś zmienną na true, aw Drugi nazywa to sukcesem, który mogę zrobić while (variable == false) {wait} i kontynuuj, ale nie wiem jak to poprawnie napisać – user1352324

+0

Jedynym sposobem na zrobienie 'wait' będzie "setTimeout", a następnie sprawdzenie zmiennej globalnej. Ale technicznie oznacza to, że Twój limit czasu może nastąpić po zakończeniu połączenia, ale wciąż czeka. Lepiej byłoby po prostu pokazać użytkownikowi obracający się gif lub coś, co wskazywałoby, że serwer działa. – Tejs

0

Oto kolejna odpowiedź na temat uruchamiania podwójnych zapytań ajaxowych. Jak Tejs, użytkownik robi wywołanie ajax w sposobie sukces ...

Plakat stwierdza Lepiej posiadające metoda sukces uruchomienie nowego żądania ajax ..”

Having two $.ajax() calls in one script

1

Używanie 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

Dzięki za odpowiedź. Edytowałem to, dodając pewne formatowanie kodu, aby poprawić czytelność. – vlasits

+0

@vlasits, które nie wydawały się odważne, jak mogłoby się wydawać, przesłałem komentarz z komentarzem, aby wyjaśnić, co się dzieje – flyingfisch

Powiązane problemy