我正在使用 JSONP 进行 AJAX 调用,该调用失败且没有报告原因。我们正在观察被调用的服务器上发生的情况,并看到 AJAX 正在添加到 URL,这可能会增加我们的问题。
返回的数据应该是JSON。当从浏览器调用该 URL 时,它会按预期返回,而当从页面调用以下代码时,会返回“未定义”错误,表明没有报告错误。
$.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);
}
});
当查看被调用的服务器时,我们看到 URL 现在是“http://foo:8080/playlist?._=1449088167560 ”。
我们认为 URL 上的额外信息可能会导致 API 在服务器上失败,但想了解这是从哪里来的,以及是否有办法将其关闭?
想法?
史蒂夫
最佳答案
_=1449088167560
来自 jQuery,因为您将 datatype
指定为 jsonp
。请参阅jQuery.ajax请参阅此处的文档以获取更多信息。具体看cache
参数说明:
cache (default:
true, false for dataType 'script' and 'jsonp'
) Type: Boolean If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
因为您使用的是 jsonp
,jQuery 会自动附加此参数,以防止 Web 结果被缓存,这通常发生在 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 。我不确定这是否是您将其粘贴到问题中时的拼写错误,但它肯定可能导致您的错误。通常,除非服务器专门查找键为 _
的参数,否则 url 中包含额外参数应该没有什么区别。然而,对于 .
,我认为从技术上讲这是一个无效的 URI 字符串。
关于jquery - AJAX 添加到 URL 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052638/