2012-04-23 28 views
12

हाय मेरे पास मेरी स्क्रिप्ट में 2 AJAX कॉल हैं, मुझे उन्हें अतिरिक्त समय के लिए asnyc चलाने की आवश्यकता है, लेकिन मुझे पहले समाप्त होने तक प्रतीक्षा करने के लिए दूसरी आवश्यकता है।jQuery एसिंक एजेक्स कॉल समाप्त होने तक प्रतीक्षा करें

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

तो कोई विचार? धन्यवाद

उत्तर

15

यदि jQuery 1.5+ का उपयोग करते हैं, तो आप इसे पूरा करने के लिए jQuery.when() का उपयोग कर सकते हैं। की तरह कुछ (संक्षिप्तता के लिए ajax कॉल छोटा, बस वस्तुओं के रूप में आप ऊपर कर रहे हैं पारित)

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

आप नहीं जानते कि किस क्रम में वे इतनी वापस आ जाएगी अगर आप हाथ से यह रोलिंग थे, तो आप चाहते हैं दूसरे अनुरोध की स्थिति की जांच करने की आवश्यकता है और लौटने तक प्रतीक्षा करें।

1

आपको अपने पहले AJAX कॉल के कॉलबैक में शामिल होने के लिए दूसरी कॉल को तार करने की आवश्यकता है। इसलिए जैसा:

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

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

जावास्क्रिप्ट के बाद से ग्राहक पर एक से अधिक थ्रेड में चला नहीं करता है, तो आप धागा ब्लॉक नहीं कर सकते जब तक कुछ खास शर्तें पूरी कर रहे हैं।

+0

लेकिन यह निष्पादन समय लंबे समय तक कर देगा क्योंकि दूसरी कॉल प्रारंभ होगा पहले के बाद समाप्त हो गया था, मैं कुछ इस तरह के बारे में सोच रहा था: पहली कॉल सफलता में मैं सच करने के लिए कुछ चर सेट कर सकते हैं और में दूसरा कॉल सफलता मैं कर सकता हूं जबकि (परिवर्तनीय == झूठा) {प्रतीक्षा} और जारी रखने से, लेकिन मुझे नहीं पता कि यह ठीक से कैसे लिखना है – user1352324

+0

'प्रतीक्षा' करने का एकमात्र तरीका 'सेटटाइम' होना होगा और फिर अपने वैश्विक चर को जांचना होगा। लेकिन तकनीकी रूप से, इसका मतलब है कि कॉल के बाद आपका टाइमआउट हो सकता है, लेकिन अभी भी इंतजार कर रहा है। सर्वर को काम करने के संकेत देने के लिए आप बस एक कताई gif या कुछ दिखाने के लिए बेहतर होगा। – Tejs

0

दोहरी AJAX अनुरोधों को चलाने पर एक और जवाब है। Tejs की तरह, उपयोगकर्ता सफलता विधि के भीतर एक ajax कॉल ...

पोस्टर में कहा गया है आप सफलता विधि एक नया ajax अनुरोध लांच होने से बेहतर कर रहे हैं बनाता है .. "

Having two $.ajax() calls in one script

1

का उपयोग करना 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

आपके उत्तर के लिए धन्यवाद। मैंने पठनीयता में सुधार के लिए कुछ कोड स्वरूपण जोड़कर इसे संपादित किया। – vlasits

+0

@vlasits जो इसे बोल्ड नहीं लगते थे, जैसा कि कोई सोचता था, मैंने यह बताने के लिए एक टिप्पणी के साथ एक संपादन सबमिट किया कि क्या हो रहा था – flyingfisch

संबंधित मुद्दे