Dav*_*vid 16 ajax jquery jsonp callback abort
我正在使用JSONP ajax调用来加载来自不同域的一些内容,如果用户在按钮上导致"鼠标悬停",则执行所有这些操作.
我可以将$ .ajax()调用返回捕获为xhr对象,并在每次用户导致"鼠标悬停"时使用它来中止ajax请求.但是JSONP回调函数仍然被调用,这会导致错误,我认为这是因为xhr.abort()方法不会阻止调用回调函数.
我尝试使用try {} catch(e){}围绕$ .ajax()调用,但在调用xhr.abort()方法后,错误仍在继续.
有没有办法处理该异常?
引发的异常是这样的(根据Firebug): jQuery16102234208755205157_1308941669256不是函数
而异常的内部结构是这样的: jQuery16102234208755205157_1308941669256({...来自不同域的我的json数据....})
Tre*_*ham 11
基本答案就是这里给出的答案:你不能真正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...
}
});
Run Code Online (Sandbox Code Playgroud)
在这里,我利用了这样一个事实,即传递给它的任何东西$.ajax都附加到this回调中使用的对象上.
abort()当然,如果jQuery 为我们这样做的话会很好.
Dec*_*ook -3
在 jQuery 1.5 中,所有 Ajax API 都有一个围绕本机 XHR 对象的包装器对象。看一眼:
http://api.jquery.com/jQuery.ajax/#jqXHR
jqxhr.abort(); // should be what you're looking for
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7400 次 |
| 最近记录: |