2010-01-04 9 views
6

से पहले समाप्त हो गया है मेरे पास एक जावास्क्रिप्ट फ़ंक्शन है जो jQuery का उपयोग करके लगातार दो अजाक्स अनुरोध करता है। मैं यह सुनिश्चित करना चाहता हूं कि दूसरे फ़ंक्शन को कॉल करने से पहले पहला अनुरोध लोड हो गया हो। कोई तरीका है तो मुझसे यह हो सकता है?सुनिश्चित करें कि पहले AJAX फ़ंक्शन दूसरे एक

+1

क्या यह दूसरा * अजाक्स * कॉल है जिसे पहले तक लौटाए जाने तक प्रतीक्षा करने की आवश्यकता है, या दूसरा * कॉलबैक * जिसे प्रतीक्षा करने की आवश्यकता है? (यानी आपको दूसरे AJAX अनुरोध को फायर करने से पहले प्रतीक्षा करने की आवश्यकता है, या दोनों को एक के बाद एक से निकाल दिया जा सकता है, लेकिन आप यह सुनिश्चित करना चाहते हैं कि यदि दूसरा पहले लौटाता है, तो उसका कॉलबैक पहले एक रिटर्न तक अवरुद्ध हो जाता है) – Graza

+0

दूसरा फ़ंक्शन तब तक नहीं निकाला जाना चाहिए जब तक कि पहले पूरा नहीं हो जाता। पहला कार्य एक फॉर्म तत्व बनाता है और दूसरा उस फॉर्म मान को लेता है और इसके आधार पर कुछ गणना करता है। – Brian

उत्तर

7

या तो विकल्पों में async: false निर्दिष्ट करें, या पहले कॉल के complete कॉलबैक में दूसरा AJAX कॉल करें।

+0

क्या वह 'async: false' नहीं होगा? –

+0

वास्तव में यह होगा। नकारात्मक तर्क को कम करें। –

+0

'async: false' बहुत अच्छा काम करता है। जिस क्रम में मैं दो कार्यों को कॉल करता हूं वह भिन्न होता है, इसलिए कॉलबैक विधि को बहुत पसंद किया जाता है। – Brian

0

पहले फ़ंक्शन के लिए आपके कॉलबैक में, अपना दूसरा कॉल करें।

0

सर्वोत्तम परिणामों के लिए आपको शायद पहले के कॉलबैक में दूसरे फ़ंक्शन का आह्वान करना चाहिए।

उदाहरण के लिए:

$.post("http://www.somewebsite.com/page.php", function(data) { 
    // whatever 
    function2(); 
}); 
0
$.post("script1.php", {data:"val"}, function(response) { 
    $.post("script2.php", {data:response}, function(results) { 
    // this second call will be initialized when the first finishes 
    }); 
}); 
0

एक उदाहरण कार्यान्वयन:

function callback() {$('div#second_ajax_output').load('http://www.google.com');} 
$('div#first_ajax_output').load('http://www.yahoo.com',callback); 
-1

संपादित करें: Misread प्रश्न; मेरी गलती। यदि आप कभी भी दो AJAX अनुरोधों को एक साथ निष्पादित करना चाहते हैं लेकिन दोनों समाप्त होने के बाद ही कॉलबैक चलाएं, तो यह है कि आप इसे कैसे करते हैं! jQuery का उपयोग करना सबसे आसान तरीका है इस तरह है

var completedCount = 0; 
var callback = function() 
{ 
    completedCount++; 
    if (completedCount == 2) 
    { 
     // Do something. 
    } 
}; 

$.post('url-1', {}, callback); 
$.post('url-2', {}, callback); 
0

:

इस प्रयास करें

$.ajax({ 
    type: "POST", 
    url: "some.php",  
    success: function(msg){ 
     $.ajax({ 
     type: "POST", 
     url: "some2.php", 

     success: function(msg){ 
      alert("End of second call"); 
     } 
     }); 
    } 
}); 
0

आसान तरीका दूसरा अनुरोध सक्रिय किया जाता है जब पहली रिटर्न (पूरा कॉलबैक में)।

यदि आपको अधिक परिष्कृत दृष्टिकोण की आवश्यकता है तो AjaxQueue प्लग-इन पर एक नज़र डालें। आप इस तरह से अनुरोध कतार कर सकते हैं।

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