2010-11-14 40 views
9

Tôi đã tìm kiếm và vấn đề này có vẻ đơn giản nhưng không thể tìm thấy câu trả lời. Tôi có nhiều yêu cầu gọi url khác nhau. Nhưng đối với mỗi url, tôi chỉ muốn kết quả một lần và nó phải là kết quả cuối cùng trong cùng một url được gọi. Vấn đề của tôi bây giờ là "làm thế nào để có được người cuối cùng?" Tôi nhìn này và nó có vẻ là 3 tuổi:Nhận yêu cầu ajax mới nhất và hủy bỏ các yêu cầu khác

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

Bất kỳ cách nào khác để làm điều này độc đáo và sạch? Nếu có cái gì đó như thế này, nó sẽ được hoàn hảo:

queue: "getuserprofile", 
cancelExisting: true 

(nơi ajax hiện có trong hàng đợi getuserprofile sẽ bị hủy bỏ)

Cảm ơn

Trả lời

10

This explains làm thế nào để sử dụng jQuery để làm một cuộc gọi ajax và cách hủy bỏ nó. Tất cả những gì bạn cần làm là tạo một mảng lưu trữ từng yêu cầu. Sau đó, bạn có thể hủy yêu cầu trước đó trong khi thêm yêu cầu mới.

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

Vì chúng tôi chỉ muốn kết quả của yêu cầu cuối cùng, điều này rất đơn giản và hoạt động.

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

chỉ yêu cầu cuối cùng được thực thi.

0

Thay vì sử dụng thư viện, bạn có thể sử dụng jquery cơ bản phương pháp Ajax:

beforeSend:{}

Ví dụ:

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(){} 

}); 
Các vấn đề liên quan