gpt4 book ai didi

jquery - 使用 jQuery 中止 JSONP ajax 请求

转载 作者:行者123 更新时间:2023-12-03 21:58:47 25 4
gpt4 key购买 nike

我正在使用 JSONP ajax 调用从不同的域加载一些内容,如果用户在按钮上引起“鼠标悬停”,所有这些内容都会被执行。

我可以捕获 $.ajax() 调用返回作为 xhr 对象,并在每次用户引起“鼠标悬停”时使用它来中止 ajax 请求。但是 JSONP 回调函数仍然被调用,这会导致错误,我认为这是因为 xhr.abort() 方法不会阻止回调函数被调用。

我尝试使用 try{}catch(e){} 包围 $.ajax() 调用,但在调用 xhr.abort() 方法后,错误仍然存​​在。

有没有办法处理这个异常?

引发的异常是这样的(根据Firebug):jQuery16102234208755205157_1308941669256 不是一个函数

异常的内部结构是这样的:jQuery16102234208755205157_1308941669256({...我来自不同域的json数据...})

最佳答案

基本答案就是给出的 here :您无法真正abort() JSONP 调用。所以真正的问题是,如何避免多余的回调调用和您看到的错误?

您不能在回调周围使用 try...catch 因为它是异步的;你必须从 jQuery 的末端捕获它,并且 jQuery 通常不处理回调抛出的异常。 (我在我的书 Async JavaScript 中对此进行了讨论。)您想要做的是为每个 Ajax 调用使用唯一的标识符,并且在调用成功回调时,检查该标识符是否与您调用时的标识符相同的电话。这是一个简单的实现:

var requestCount = 0;
$.ajax(url, {
dataType: 'jsonp',
requestCount: ++requestCount,
success: function(response, code) {
if (requestCount !== this.requestCount) return;
// if we're still here, this is the latest request...
}
});

在这里,我利用了这样一个事实:传递给 $.ajax 的任何内容都会附加到在回调中用作 this 的对象。

当然,如果 jQuery 让 abort() 为我们做这件事,那就太好了。

关于jquery - 使用 jQuery 中止 JSONP ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com