2010-10-22 47 views

Trả lời

3

Tôi đoán bạn bắn những json request qua một đối tượng XMLHttpRequest hay nói cách khác, bạn đang sử dụng .ajax(). Nói chung, bạn có thể hủy yêu cầu ajax bằng cách sử dụng .abort().

var xhr = $.ajax({}); 

// somewhere else 
if(xhr) 
    xhr.abort(); 

từ .ajax() trả về XHR kiện ban đầu bạn có thể lưu trữ một nơi nào đó và hủy bỏ yêu cầu đó. Tất nhiên bạn sẽ phải tạo ra một số "yêu cầu logic" để xử lý công cụ này. Ví dụ:

var xhrmanager = function() { 
    var requests = [], 
     self  = {}; 

    self.create = function(params, cb){ 
     if(typeof params === 'object') {// additional checks here 
      var xhr = $.ajax($.extend({ 
       url:  '/path/script.pl', 
       dataType: 'json', 
       type:  'GET', 
       success: function(data, status, req){ 
        if(typeof cb === 'function') 
         cb.apply(this, [data]);       
       }, 
       complete: function(req, status) { 
        var pos = $.inArray(req, requests); 

        if(pos > -1) 
         requests.splice(pos, 1) 
       } 
      }, params || {})); 
     } 
    }; 
    self.clearAll = function(){ 
     for(var i = 0, len = requests.length; i < len; i++){ 
      requests[i].abort(); 
     } 
    }; 

    return self; 
}; 

sử dụng như:

var json_requests = xhrmanager(); 

json_requests.create({ 
    data: 'some=data' 
}, function(data) { 
    // do something 
}); 

json_requests.clearAll(); 
0

một đầu tiên, cơ bản, nỗ lực sẽ là: chỉ cần thực hiện một nhỏ bù đắp cho các yêu cầu (ví dụ 100ms.). vì vậy bạn chỉ cần đặt lại bộ hẹn giờ mỗi khi nhấn một phím.

ví dụ:

var timeout; 
var textBox = $('#textbox'); 
textBox.change(function() { 
    if (timeout) { 
     clearTimeout(timeout); 
    } 
    var callingMethod = /* insert your method for the request */; 
    timeout = setTimeout(callingMethod, 100); 
}); 

lần thử thứ hai là: yêu cầu phải là biến. mỗi khi bạn nhập yêu cầu-logic của bạn kiểm tra biến đối với null (một số loại: mô hình khóa đôi). vì vậy nếu biến không phải là null, bạn biết rằng một yêu cầu đang diễn ra. do đó bạn lưu trữ yêu cầu cũ trong biến bạn có thể hủy nó.

ví dụ:

var request; 
function DoMagicThing() { 
    if (request) { 
     request.abort(); 
     request = null; 
    } 

    request = $.ajax({ 
     /* insert options here */, 
     complete = function() { 
      request = null; 
     } 
    }); 
} 
Các vấn đề liên quan