中止jQuery JSONP请求将引发错误
我正在用jQuery制作简单的自动建议(autocompleter)插件。不幸的是,我不得不使用jsonp。这是正常的,它可以工作,但当我中止请求时,它会抛出错误中止jQuery JSONP请求将引发错误,jquery,jsonp,Jquery,Jsonp,我正在用jQuery制作简单的自动建议(autocompleter)插件。不幸的是,我不得不使用jsonp。这是正常的,它可以工作,但当我中止请求时,它会抛出错误 Uncaught TypeError: Property 'jQuery171036404498340561986_1330693563756' of object [object Window] is not a function 有密码 if(xhr) {xhr.abort()}; xhr = $.ajax({ url:
Uncaught TypeError: Property 'jQuery171036404498340561986_1330693563756' of object [object Window] is not a function
有密码
if(xhr) {xhr.abort()};
xhr = $.ajax({
url: "someurl/getmedata",
type: 'get',
dataType: 'jsonp',
data: {q: "query"},
success: function(results) {},
error: function() {}
})
json、xml或其他请求的经典方式可以很好地工作
Anny suggestion?jQuery使用
标记来实现JSONP。您无法中止脚本标记的加载。JSONP
不使用XMLHTTPRequest
,但实际上在文档中创建了一个
标记,以便能够进行跨域请求
您不能简单地中止JSONP请求
文件中规定:
某些类型的Ajax请求,例如JSONP和跨域GET请求,不使用XHR;在这些情况下,传递给回调的XMLHttpRequest和textStatus参数是未定义的
对于jQuery1.5+,以前是从$.ajax()返回XHR对象,现在它返回一个封装XHR对象的超集jqXHR对象
当传输机制不是XMLHttpRequest(例如,JSONP请求的脚本标记)时,jqXHR对象尽可能模拟本机XHR功能
因此,它返回一个对象,但某些函数性实际上不可用,如.abort()
该插件似乎提供了手动中止JSONP请求的可能性。我自己没有用过,但值得一试。首先,使用一些排序逻辑。这将确保您最后的请求优先于旧请求。 这是你的护照 此外,您还可以利用这些
$。ajax
设置:
超时:
为每个请求设置一个时间限制,并防止请求以静默方式失败
发送前:
在进行呼叫之前验证某些条件。补充测序助手
As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.
例如:
function updateResults() {
// Init counter & record current request
if (!window.reqSeq) window.reqSeq = 0;
window.reqSeq +=1;
var thisRequest = window.reqSeq;
$.ajax({
url: [..],
crossDomain: true,
contentType: "application/json",
dataType: 'jsonp',
timeout: 5000, // give 5 seconds of margin
data: { [..] },
beforeSend: function() {
if(thisRequest < window.reqSeq) {
return false;
}
},
success: function(data, textStatus, jqXHR) {
if(thisRequest < window.reqSeq) {
return;
}
else print(data);
},
error: function(jqXHR, textStatus, errorThrown) {
// it'll be called on timeout (error) and beforeSend (abort)
print(textStatus);
}
});
}
函数updateResults(){
//初始化计数器&记录当前请求
如果(!window.reqSeq)window.reqSeq=0;
window.reqSeq+=1;
var thisRequest=window.reqSeq;
$.ajax({
网址:[……],
跨域:是的,
contentType:“应用程序/json”,
数据类型:“jsonp”,
超时:5000,//留出5秒的余量
数据:{[…]},
beforeSend:function(){
if(此请求<窗口请求顺序){
返回false;
}
},
成功:函数(数据、文本状态、jqXHR){
if(此请求<窗口请求顺序){
返回;
}
其他打印(数据);
},
错误:函数(jqXHR、textStatus、errorshown){
//它将在超时(错误)和发送前(中止)调用
打印(文本状态);
}
});
}
好的,去拿。有没有其他方法可以处理全局上下文中缺少的函数?我添加了一个插件链接,它似乎提供了中止jsonp请求的可能性。使用动态回调名称可以吗?像callback=random()
$.jsonp({url:“my_url?callback=“+callback,callback:callback})
老实说,我对这个插件不太了解,我只是开始了解它。根据可能的说法是的。对我来说,问题是我添加了一个超时值。这个问题与之前的问题重复,尽管这个问题从未得到正确的回答,而这个问题是。