2014-04-10 5 views
5

निम्न जावास्क्रिप्ट कोड में, मैं एक ही समय में दो अजाक्स अनुरोध भेज रहा हूं, तो यह अलग कैसे है।
फायरबग का उपयोग करके विश्लेषण के बाद, मैं असामान्य निष्कर्ष पर आया कि:
"जो कभी भी (अजाक्स) प्रतिक्रिया आ रही है, पहले प्रिंटिंग कर रही है"एक ही समय में एक ही घटना पर दो AJAX अनुरोध। ठेठ व्यवहार क्या होना चाहिए? अनुरोध सिंक्रोनस

समस्या 2: अगर मैं एक यादृच्छिक स्ट्रिंग के लिए अजाक्स यूआरएल गंतव्य आवंटित (कहते हैं कि "एबीसीडी") [जो मौजूद नहीं है] तो ajax कॉल की कुल संख्या 3 के लिए बढ़ा दिया जाएगा?

$(document).ready(function(e) { 

    $("form[ajax=true]").submit(function(e) { 

    e.preventDefault(); 

    var form_data = $(this).serialize(); 
    var form_url = $(this).attr("action"); 
    var form_method = $(this).attr("method").toUpperCase(); 

    $("#loadingimg").show(); 

    $.ajax({ 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){       
     alert ("a"); 
     // $("#result").html(returnhtml); 
     // $("#loadingimg").hide();      
     }   
    }); 

    $.ajax({ 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){       
     // $("#duplicate").html(returnhtml); 
     // $("#loadingimg").hide(); 
     alert("b"); 
     }   
    }); 
    }); 
}); 

कृपया निम्नलिखित Fiddle देखें।

+1

'" जो कभी भी (AJAX) प्रतिक्रिया आ रही है, पहले प्रिंटिंग आखिरी है "शायद - शायद, शायद नहीं। यह वास्तव में आपके विशेष परिदृश्य में मामला हो सकता है कि यह परिणाम ज्यादातर समय है। AJAX परिभाषा के अनुसार, एसिंक्रोनस है। कोई गारंटी नहीं है कि कोई पहले (या बिल्कुल) "खत्म" करेगा। "समस्या 2" बहुत समझ में नहीं आता है, क्या आप विस्तारित कर सकते हैं? वास्तव में, आपका प्रश्न क्या है? – David

+0

क्या आपको किसी विशेष क्रम में होने की आवश्यकता है? – wrxsti

+0

मैं पुष्टि नहीं कर सकता। पहेली का उपयोग [http://jsfiddle.net/d66DN/](http://jsfiddle.net/d66DN/) आप पहली बार पहली बार वापसी अलर्ट देख सकते हैं। अगर आप एक यादृच्छिक यूआरएल के लिए अनुरोध करते हैं तो आपको 301 मिल जाएगा: पूर्ववत हटा दिया गया है। यदि आप केवल एक यूआरएल बदलते हैं, तो आपको 3 मिलते हैं, आप दोनों को 4 बदलें। – Novalis

उत्तर

3

मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं, लेकिन मैं आपको कुछ जानकारी देने की कोशिश करूंगा। डेविड की तरह कहा कि ऐसा लगता है कि पहला अनुरोध आखिरी जवाब है, लेकिन यह कई परिस्थितियों में अलग-अलग होगा। अनुरोधों के परिणाम या आदेश को नियंत्रित करने के लिए आप विभिन्न तरीकों से ऐसा कर सकते हैं।

1) पहले अनुरोध की सफलता पर आप दूसरा अनुरोध शुरू कर सकते हैं। मैं गति उद्देश्यों के लिए इसकी अनुशंसा नहीं करता क्योंकि आपके अनुरोध समानांतर में नहीं चल रहे हैं।

$.ajax({ // First Request 
    url: form_url, 
    type: form_method,  
    data: form_data,  
    cache: false, 
    success: function(returnhtml){  
     $.ajax({ //Seconds Request 
      url: form_url, 
      type: form_method,  
      data: form_data,  
      cache: false, 
      success: function(returnhtml){       
       // $("#duplicate").html(returnhtml); 
       // $("#loadingimg").hide(); 
       alert("b"); 
      }   
     }); 
     alert ("a"); 
     // $("#result").html(returnhtml); 
     // $("#loadingimg").hide();      
     }   
    }); 

2) आप एक ही समय में दोनों अनुरोधों प्रतिक्रियाओं की आवश्यकता है, तो पसंदीदा तरीका संभावना jQuery आस्थगित किया जाएगा। इससे दोनों अनुरोध समानांतर में चलेंगे, और एक बार दोनों प्रतिक्रियाएं प्राप्त हो जाने पर आप आगे बढ़ सकते हैं।

कुछ इस तरह:

var result1; 
var result2; 
$.when(
    $.ajax({ // First Request 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){  
       result1 = returnhtml;     
     }   
    }); 

    $.ajax({ //Seconds Request 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){       
      result2 = returnhtml;  
     }   
    }); 

).then(function() { 
    $('#result1').html(result1); 
    $('#result2').html(result2); 
}); 

चेक आउट:

https://api.jquery.com/jQuery.when/

http://api.jquery.com/deferred.then/

https://api.jquery.com/deferred.done/

मुझे आशा है कि इस मदद करता है!

+0

क्या यह आपके किसी भी प्रश्न का उत्तर या उत्तर देता है? – wrxsti

-4
var result1; 
var result2; 
$.when(
    $.ajax({ // First Request 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){  
       result1 = returnhtml;     
     }   
    }); 

    $.ajax({ //Seconds Request 
     url: form_url, 
     type: form_method,  
     data: form_data,  
     cache: false, 
     success: function(returnhtml){       
      result2 = returnhtml;  
     }   
    }); 

).then(function() { 
    $('#result1').html(result1); 
    $('#result2').html(result2); 
}); 
+0

हैलो गौरव आपने उदाहरण दिया है पहले से ही wrxsti ने एक ही उदाहरण का जवाब दिया –

10

गौरव, तो आपको एक त्रुटि है, 1 $ .ajax के अंत में यह ), और ) के रूप में 2 के रूप में समाप्त होना चाहिए।

आप समाप्त नहीं हो सकता के साथ ;

var result1; 
 
var result2; 
 
$.when(
 
    $.ajax({ // First Request 
 
     url: form_url, 
 
     type: form_method,  
 
     data: form_data,  
 
     cache: false, 
 
     success: function(returnhtml){  
 
       result1 = returnhtml;     
 
     }   
 
    }), 
 

 
    $.ajax({ //Seconds Request 
 
     url: form_url, 
 
     type: form_method,  
 
     data: form_data,  
 
     cache: false, 
 
     success: function(returnhtml){       
 
      result2 = returnhtml;  
 
     }   
 
    }) 
 

 
).then(function() { 
 
    $('#result1').html(result1); 
 
    $('#result2').html(result2); 
 
});

0

या अपने कोड में server_response का उपयोग करें। स्क्रिप्ट शर्त से शुरू होती है:

if (recherche1.length>1) { 
    $.ajax({ // First Request 
     type :"GET", 
     url : "result.php", 
     data: data,  
     cache: false, 
     success: function(server_response){  
      $('.price1').html(server_response).show();     
     }   
    }), 

    $.ajax({ //Seconds Request 
     type :"GET", 
     url : "result2.php", 
     data: data,  
     cache: false, 
     success: function(server_response){       
      $('.price2').html(server_response).show();  
     }   
    }); 
} 
संबंधित मुद्दे