ajax error cancel,取消一个jQuery AJAX调用它返回之前?(Cancel a jQuery AJAX call

我有一个打开,然后一个AJAX调用由jQuery的对话框。 我想使它所以,如果对话框关闭或取消按钮被按下的AJAX调用被取消,其回调函数没有被调用。 我能想到的一些方法,象这样一个变量来做到这一点:

function doStuff(){

var doCallback = true;

$('#dialog').dialog({

title: 'Dialog Title',

modal: true,

buttons: {

Cancel: function() {

doCallback = false;

doSomethingElse();

}

}

});

$.get('url/url/url', function(data){

if(doCallback){

doTheSuccessThing(data);

}

});

}

但是,不知何故,感觉脏我,它实际上并没有从完成停止AJAX调用。 有没有取消正在进行的AJAX调用内置的方式吗?

Answer 1:

当我有可能被触发多次回调,但我想只能用最后一个,我用这个模式:

var resultsXHR, resultsTimer, resultsId=0;

$('input').keyup(function(){

clearTimeout(resultsTimer); // Remove any queued request

if (resultsXHR) resultsXHR.abort(); // Cancel request in progress

resultsTimer = setTimeout(function(){ // Record the queued request

var id = ++resultsId; // Record the calling order

resultsXHR = $.get('/results',function(data){ // Capture request in progress

resultsXHR = null; // This request is done

if (id!=resultsId) return; // A later request is pending

// ... actually do stuff here ...

});

},500); // Wait 500ms after keyup

});

该abort()单独不足以阻止调用成功回调; 你还可以找到你的回调运行,即使你试图取消该请求。 这就是为什么它需要使用resultsId跟踪器,让你的回调停止处理,如果另一个,后来,重叠的回调蓄势待发。

鉴于多么普遍和繁琐的这是,我认为这是一个好主意来包装它在一个可重复使用的方式,不需要你来了,你要处理的每一个局部变量名的独特三重:

(function($){

$.fn.bindDelayedGet = function(event,delay,url,dataCallback,dataType,callback){

var xhr, timer, ct=0;

return this.bind(event,function(){

clearTimeout(timer);

if (xhr) xhr.abort();

timer = setTimeout(function(){

var id = ++ct;

xhr = $.get(url,dataCallback && dataCallback(),function(data){

xhr = null;

if (id==ct) callback(data);

},dataType);

},delay);

});

};

})(jQuery);

// In action

var inp = $('#myinput').bindDelayedGet('keyup',400,'/search',

function(){ return {term:inp.val()}; },

'html',

function(html){ $('#searchResults').clear().append(html); }

);

你可以找到更详细的讨论上面的代码在我的网站 。

Answer 2:

好了,所以基于关闭使用由我想出了这样的$不用彷徨函数返回XmlHttpRequest对象中的建议:

function doStuff(){

var ajaxRequest = $.ajax({

url : 'url/url/url',

type : "GET",

success : function(data){

ajaxRequest = null;

doSuccessStuff(data);

}

});

$('#dialog').dialog({

title: 'Stuff Dialog',

bgiframe: true,

modal: true,

buttons: {

Cancel: function() {

if (ajaxRequest)

ajaxRequest.abort();

doCancelStuff();

}

}

});

}

看来工作和清洁的感觉给我。

Answer 3:

在jQuery的方法,但你可以使用XmlHttpRequest对象从jQuery GET / POST / AJAX函数返回。

从jQuery的博客 :

// Perform a simple Ajax request

var req = $.ajax({

type: "GET",

url: "/user/list/",

success: function(data) {

// Do something with the data...

// Then remove the request.

req = null;

}

});

// Wait for 5 seconds

setTimeout(function(){

// If the request is still running, abort it.

if ( req ) req.abort();

}, 5000);

Answer 4:

看起来是这样,但我从来没有做过。

$.get返回XmlHttpRequest对象,它有一个abort()你可以调用方法。 也许尝试呢?

Answer 5:

如果你把一个条件在脚本AJAX来这里的条件是真的,你输出你的HTML,否则,你不输出任何东西,那么你可以做简单的像这样成功的函数如果(HTML)检查:

$.ajax({

type: "GET",

url: "url.php",

data: "data="+data,

success: function(html)

{

if(html){

$("#container").empty().html(html);

}

}

});

在这个例子中,url.php可能是这个样子:

$data = $_GET['data'];

if($data=="whatever"){

echo "

Hello
";

}else{}

这为我工作。 我知道这个帖子是旧的,但希望它可以帮助别人。

文章来源: Cancel a jQuery AJAX call before it returns?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值