Php 在发出新请求时停止以前的ajax
我有剧本Php 在发出新请求时停止以前的ajax,php,jquery,ajax,Php,Jquery,Ajax,我有剧本 $('#postinput').on('keyup',function(){ var txt=$(this).val(); $.ajax({ type: "POST", url: "action.php", data: 'txt='+txt, cache: false, context:this, success: function(html) {
$('#postinput').on('keyup',function(){
var txt=$(this).val();
$.ajax({
type: "POST",
url: "action.php",
data: 'txt='+txt,
cache: false,
context:this,
success: function(html)
{
alert(html);
}
});
});
假设有人键入a,ajax将运行。他立刻输入b、c等等。Ajax每次都运行。有没有办法在发出新请求时停止以前的请求?您可以使用
xhr
的abort()
方法。试试这个:
var currentXhr;
$('#postinput').on('keyup',function(){
currentXhr && currentXhr.readyState != 4 && currentXhr.abort(); // clear previous request
var txt = $(this).val();
var currentXhr = $.ajax({
type: "POST",
url: "action.php",
data: 'txt=' + txt,
cache: false,
context:this,
success: function(html) {
alert(html);
}
});
});
如果不想使用全局变量,可以将xhr
存储在#postinput
元素的data-*
属性中
另一种方法是仅在用户停止键入时触发AJAX请求:
var timer;
$('#postinput').on('keyup',function(){
clearTimeout(timer);
var txt = $(this).val();
var timer = setTimeout(function() {
$.ajax({
type: "POST",
url: "action.php",
data: 'txt=' + txt,
cache: false,
context:this,
success: function(html) {
alert(html);
}
});
}, 100); // sends request 100ms after typing stops.
});
您可以使用Jquery这样做-
jaxRequests = 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.
}
为什么不在最后一次击键后只启动一个请求?可能是@Andreas的副本,我正在使用加载图像来显示处理过程
setTimeout
在加载图像show n hide时出现问题。可能与Hey tnx重复。我想问两件事。不管我想做什么。。停止ajax是一种错误的做法吗?假设我使用多个ajax。上面的代码不会影响其他代码ryt?停止AJAX并不是一件坏事。我想说,阻止过时的AJAX请求是一件非常好的事情。通过存储引用,您将仅停止处理该特定请求,其他所有请求将不受影响。