我正在使用JSONP进行AJAX调用,但由于没有报告原因而失败。我们正在观察正在调用的服务器上发生了什么,并看到AJAX正在添加到URL,这可能会增加我们的问题。
返回的数据应该是JSON。当从浏览器调用URL时,它会按预期返回,当从调用下面代码的页面返回时,返回错误“Undefined”,表明没有报告错误。
$.ajax({
url: 'http://foo:8080/playlist',
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp : false,
success: function(data){
//Writes return data to UI
writeToUI(text.html(JSON.stringify(data)));
},
error: function(e){
alert(e.message);
}
});
在观看正在调用的服务器时,我们发现该网址现在为“http://foo:8080/playlist?._=1449088167560”。
我们认为有关URL的额外信息可能导致API在服务器上失败,但想知道它来自哪里,以及是否有办法将其关闭?
想法?
史蒂夫
答案 0 :(得分:1)
_=1449088167560
来自jQuery,因为您将datatype
指定为jsonp
。有关详细信息,请参阅此处的jQuery.ajax文档。具体来看cache
参数说明:
缓存(默认:
true, false for dataType 'script' and 'jsonp'
) 类型:布尔值 如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是附加" _ = {timestamp}"到GET参数。其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。
因为您正在使用jsonp
,所以jQuery会自动附加此参数,以防止通过GET
次请求缓存网络结果。那是_=1449088167560
来自的地方。我从未在jQuery内部查看过该代码,但我相信它会从时间戳(也许是UNIX时间戳值)生成此数字。
至于解决此问题,我猜您可以尝试专门将cache
参数设置为true
,例如:
$.ajax({
url: 'http://foo:8080/playlist',
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp : false,
cache: true,
success: function(data){
//Writes return data to UI
writeToUI(text.html(JSON.stringify(data)));
},
error: function(e) {
alert(e.message);
}
});
这是普通GET
请求的默认值,应防止附加额外参数。
要检查的另一件事是您的网址中.
和?
值之间隐藏的明显_
值:http://foo:8080/playlist?._=1449088167560。我不确定这是否是你在问题中粘贴时的拼写错误,但它肯定会导致你的错误。通常情况下,除非服务器专门查找关键字为_
的参数,否则在网址中包含额外参数应该没有区别。但是,对于.
,我认为从技术上讲,这是一个无效的URI字符串。