Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
中止jQuery JSONP请求将引发错误_Jquery_Jsonp - Fatal编程技术网

中止jQuery 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:

我正在用jQuery制作简单的自动建议(autocompleter)插件。不幸的是,我不得不使用jsonp。这是正常的,它可以工作,但当我中止请求时,它会抛出错误

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})
老实说,我对这个插件不太了解,我只是开始了解它。根据可能的说法是的。对我来说,问题是我添加了一个超时值。这个问题与之前的问题重复,尽管这个问题从未得到正确的回答,而这个问题是。