2010-11-14 13 views
9

मैं खोज रहा हूं और यह समस्या सरल लगती है लेकिन उत्तर नहीं मिल सका। मेरे पास अलग-अलग यूआरएल को कॉल करने के लिए कई अनुरोध हैं। लेकिन प्रत्येक यूआरएल के लिए, मुझे केवल एक बार परिणाम चाहिए और यह उसी यूआरएल में आखिरी वाला होना चाहिए। मेरी समस्या अब है "केवल अंतिम कैसे प्राप्त करें?" मैं इस को देखा और यह 3 वर्ष हो रहा है:नवीनतम AJAX अनुरोध प्राप्त करें और अन्य को छोड़ दें

http://plugins.jquery.com/project/ajaxqueue

इस अच्छी तरह से और सफाई करने के लिए किसी भी अन्य तरीका है? अगर वहाँ कुछ इस तरह है, यह अधिक उचित होगा:

queue: "getuserprofile", 
cancelExisting: true 

(जहां getuserprofile कतार में मौजूदा ajax रद्द कर दिया जाएगा)

धन्यवाद

उत्तर

10

This explains कैसे jQuery का उपयोग करने के लिए एक ajax कॉल करने के लिए और इसे कैसे रोकें। आपको केवल एक सरणी बनाना है जो प्रत्येक अनुरोध को संग्रहीत करता है। फिर आप नया जोड़ते समय पिछले अनुरोध को रद्द कर सकते हैं।

ajaxRequests = new Array(); 

queueRequest = function(whatever, you, want) { 
    if(ajaxRequests[ajaxRequests.length - 1]) { 
     ajaxRequests[ajaxRequests.length - 1].abort(); 
    } 

    ajaxRequests[ajaxRequests.length] = //Insert New jQuery AJAX call here. 
} 
4

चूंकि हम केवल अंतिम अनुरोध का परिणाम चाहते हैं, यह बहुत आसान और काम करता है।

var ajax = null; 
var getFoo = function() { 
    if(ajax) ajax.abort(); 
    ajax= $.ajax({}); 
}; 
getFool(); 
getFool(); 
getFool(); 
getFool(); 
getFool(); 
getFool(); 

केवल अंतिम अनुरोध निष्पादित किया गया है। उदाहरण के लिए

beforeSend:{}

:

0
इसके बजाय पुस्तकालय का उपयोग करने का

, आप बेसिक jQuery अजाक्स विधि का उपयोग कर सकते हैं

xhr = jQuery.ajax({ 
      url: /*Your URL*/ 
      type: "POST", 
      data: { 
       //data 
      }, 
      /* if there is a previous ajax request, then we abort it and then set xhr to null */ 
      beforeSend : function() {   
       if(xhr != null) { 
        xhr.abort(); 
       } 
      }, 
success:function(){} 

}); 
संबंधित मुद्दे