我有两个函数autosubmit()
和manualsubmit()
function autosubmit() {
$.post('action.php', $('#form').serialize(), function(data){
$('#container').html(data);
});
}
function manualsubmit() {
autosubmit();
}
autosubmit()
会在正文加载时调用,但有时需要load
container
manualsubmit()
数据,然后点击再试按钮会触发abort()
。我想中止之前发送给服务器的ajax请求。我无法实施{{1}}方法。
答案 0 :(得分:2)
发送后,您无法取消ajax请求。您只能忽略JS中的返回值。
您可以使用.data
取消显示返回的值:
function autosubmit(){
$body = $("body");
if($body.data('autosubmit') !== true){
$.post('action.php', $('#form').serialize(), function(data){
if($body.data('autosubmit') !== true) $('#container').html(data);
});
}
}
function manualsubmit(){
$("body").data('autosubmit',true);
$.post('action.php', $('#form').serialize(), function(data){
$('#container').html(data);
});
}
说明:调用manualsubmit()
后,会使用jQuery的'autosubmit' => true
将.data
添加到文档正文中。如果调用autosubmit()
,或者返回了其ajax请求,则会在请求或显示数据之前确保缺少上述值。
答案 1 :(得分:1)
看看这个例子:
var currentRequest = null;
currentRequest = $.ajax({
url: 'action.php',
type: 'post',
data: {your_fields_params},
beforeSend: function(){
if( currentRequest != null )
currentRequest.abort();
},
success: function(){
}
});
答案 2 :(得分:1)
使用$.post
并不排除使用abort
。它返回一个与$.ajax
相同的jqXHR对象,因此你可以调用它的abort方法,如下所示:
var previousRequest;
function autosubmit() {
previousRequest = $.post('action.php', $('#form').serialize(), function(data){
$('#container').html(data);
});
}
function manualsubmit() {
previousRequest && previousRequest.abort(); // abort the request, if there was one
autosubmit();
}
请注意,这不会停止正在进行的AJAX请求(因为这是不可能的),只会执行该请求的返回处理程序。