mik*_*ike 26 javascript ajax jquery
基于:使用jQuery中止Ajax请求 ...在inventory_search()中 - 在发出ajax请求之前,如何检查当前请求并在发出新请求之前中止()它们?或者......有更好的方法吗?
<script type="text/javascript">
$(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);
}
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
spi*_*non 61
创建所有请求的数组队列.然后,如果您找到需要中止所有现有请求的点,则可以循环遍历该阵列并对所有挂起的请求调用abort.应该很简单.
虽然另一种方法是只保留一个内部标志,指示当前是否正在处理请求,如果有请求则跳过请求.或者处理你认为合适的方式.
编辑:检查这个问题类似的情况:如何避免3 ajax调用?
编辑2:所以我可以做的是有一个数组,你附加所有的ajax调用.这实际上只是制作一个XmlHttpRequest,这是从ajax调用返回的内容.所以
requests.push(
$.ajax({
type: 'post',
url: '/test.php',
data: search_data,
success: function(data) {
$('#catalog').html(data);
}
}));
Run Code Online (Sandbox Code Playgroud)
这会将您的所有请求添加到您可以在某处定义的请求数组中.然后当你想要杀死所有挂起的请求时,你可以循环遍历数组并调用abort来终止请求.
for(var i = 0; i < requests.length; i++)
requests[i].abort();
Run Code Online (Sandbox Code Playgroud)
或者只是在函数外部定义一个变量,该变量是一个标志,指示是否正在发出请求.您甚至可以使其更具体并存储搜索数据,并且只跳过对相同数据有待处理请求的请求,并允许针对不同数据的其他请求.
希望这足以让你开始.
Rob*_*est 23
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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51247 次 |
| 最近记录: |