我正在使用jQuery制作简单的自动提示(autocompleter)插件.不幸的是我必须使用jsonp.没关系,它可以工作,但是当我中止请求时,它会抛出错误.
Uncaught TypeError: Property 'jQuery171036404498340561986_1330693563756' of object [object Window] is not a function
Run Code Online (Sandbox Code Playgroud)
有代码
if(xhr) {xhr.abort()};
xhr = $.ajax({
url: "someurl/getmedata",
type: 'get',
dataType: 'jsonp',
data: {q: "query"},
success: function(results) {},
error: function() {}
})
Run Code Online (Sandbox Code Playgroud)
使用json,xml或其他请求的经典方式可以正常工作.
安妮的建议?
Did*_*hys 14
JSONP并没有使用XMLHTTPRequest,但实际上创建了一个<script>文档中的标签,以便能够使跨域请求.
您根本无法中止JSONP请求.
它在$ .ajax()文档中说明:
某些类型的Ajax请求(例如JSONP和跨域GET请求)不使用XHR ; 在这些情况下,传递给回调的XMLHttpRequest和textStatus参数是未定义的.
至于jQuery 1.5+,以前是从$ .ajax()返回XHR对象,现在它返回一个超集jqXHR对象,它封装了XHR对象.
当传输机制不是XMLHttpRequest(例如,JSONP请求的脚本标记)时,jqXHR对象尽可能模拟本机XHR功能.
所以它返回一个对象但实际上没有一些功能,比如.abort().
插件jQuery-JSONP似乎提供了手动中止JSONP请求的可能性.我自己没有用它,但值得一试.