jquery1.4.4 ajax在页面关闭时无法abort,关于javascript:jquery abort()发送另一个请求之前的ajax请求...

基于:使用jQuery中止Ajax请求...在inventory_search()中 - 在发出ajax请求之前,如何检查当前请求并在发出新请求之前中止()它们? 或者......有更好的方法吗?

$(function() {

$('form#internal_catalog').change(function() {

inventory_search();

});

});

function inventory_search() {

var search_data = $('form#internal_catalog').serialize();

var a = $.ajax({

type: 'post',

url: '/test.php',

data: search_data,

success: function(data) {

$('#catalog').html(data);

}

});

}

创建所有请求的数组队列。然后,如果您找到需要中止所有现有请求的点,则可以循环遍历该数组并对所有挂起的请求调用abort。应该很简单。

虽然另一种方法是只保留一个内部标志,指示当前是否正在处理请求,如果有请求则跳过请求。或者处理你认为合适的方式。

编辑:检查这个问题类似的情况:如何避免3 ajax调用?

编辑2:所以我可以做的是有一个数组,你附加所有的ajax调用。这实际上只是制作一个XmlHttpRequest,这是从ajax调用返回的内容。所以

requests.push(

$.ajax({

type: 'post',

url: '/test.php',

data: search_data,

success: function(data) {

$('#catalog').html(data);

}

}));

这会将您的所有请求添加到您可以在某处定义的请求数组中。然后当你想要杀死所有挂起的请求时,你可以循环遍历数组并调用abort来终止请求。

for(var i = 0; i < requests.length; i++)

requests[i].abort();

或者只是在函数外部定义一个变量,该变量是一个标志,指示是否正在发出请求。您甚至可以使其更具体并存储搜索数据,并且只跳过对相同数据有待处理请求的请求,并允许针对不同数据的其他请求。

希望这足以让你开始。

Spinon的答案非常适合中止所有ajax查询,但不能很好地跟踪一个查询。

我经常发现自己在做类似的事情

var ajax_request;

function do_something()

{

if(typeof ajax_request !== 'undefined')

ajax_request.abort();

ajax_request = $.ajax({

type: 'post',

url: '/test.php',

data: search_data,

success: function(data) {

$('#catalog').html(data);

}

});

}

+1我使用完全相同的方法。 (ajax_request var name ^^除外)......它工作正常!

我刚刚将var ajax_request;更改为var ajax_request = new XMLHttpRequest();并且正常工作。 +1的想法。

使用jQuery AjaxManager插件非常简单:

$.manageAjax.create('unique_identifier',{

queue:'clear',cacheResponse:false,maxRequests:1,abortOld:true

});

jQuery.manageAjax.abort('unique_identifier');

jQuery.manageAjax.clear('unique_identifier');

jQuery.manageAjax.add('unique_identifier',{success: function(data) {}});

使用全局变量来保存当前请求的句柄。在这种情况下,将函数声明为var a,并将其设置为全局。在调用ajax检查之前,它不是null。如果它不是null abort,则另外用新的ajax分配它。在success / complete事件中,请确保清除变量a。可能不是最好的解决方案,但效果最好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值