Ste*_*veV 3 ajax jquery json jsonp
我正在使用 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);
}
});
Run Code Online (Sandbox Code Playgroud)
当观察服务器被调用时,我们看到 URL 现在是“ http://foo:8080/playlist?._=1449088167560 ”。
我们认为 URL 上的额外信息可能会导致 API 在服务器上失败,但想看看这是从哪里来的,以及是否有办法将其关闭?
有想法吗?
史蒂夫
来自_=1449088167560jQuery,因为您指定了datatypeas jsonp。请参阅此处的jQuery.ajax文档以获取更多信息。具体看cache参数说明:
缓存(默认值
true, false for dataType 'script' and 'jsonp':) 类型:Boolean 如果设置为 false,将强制浏览器不缓存请求的页面。注意:将缓存设置为 false 只能正确处理 HEAD 和 GET 请求。它的工作原理是将“_={timestamp}”附加到 GET 参数。其他类型的请求不需要该参数,但在 IE8 中,当对已通过 GET 请求的 URL 进行 POST 时除外。
因为您使用的是jsonpjQuery,所以会自动附加此参数以防止 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);
}
});
Run Code Online (Sandbox Code Playgroud)
这是正常请求的默认设置GET,应该防止附加额外的参数。
另一件需要检查的事情是隐藏在您的网址中的和值.之间的表观值: http://foo:8080/playlist?._=1449088167560。我不确定这是否是您将其粘贴到问题中时的拼写错误,但它肯定可能导致您的错误。通常,除非服务器专门寻找关键是 的参数,否则 url 中包含额外的参数应该没有什么区别。然而,我认为这在技术上是一个无效的 URI 字符串。?__.
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |