【发布时间】:2014-07-03 06:48:01
【问题描述】:
我正在尝试使用来自远程源的 getJSON jquery 方法从 json 中检索一些信息。
无效的示例网址:
https://store.sonyentertainmentnetwork.com/store/api/chihiro/00_09_000/container/GR/en/999/EP0001-NPEB00932_00-GASSASSINS000001
当上面的url设置为json时,由于跨域策略而失败。
因此,使其成为 jsonp 请求(在 url 末尾添加 &callback=?)不会返回任何内容。
我注意到 jsonp 请求请求通过(在浏览器显示上等待 store.sonyentertainmentnetwork.com)但没有返回任何内容。
还注意到当 jsonp url 在浏览器中输入时返回此字符串:
{"codeName":"ResourceDoesNotExist"}
我用 yahoo json api 尝试了相同的脚本并且工作正常。
有效的示例网址:
https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20answers.search%20where%20query%3D%22cars%22%20and%20category_id%3D2115500137%20and%20type%3D%22resolved%22&format=json&diagnostics=true&callback=
代码:
$(document).ready(function(){
$(function() {
$.getJSON('https://store.sonyentertainmentnetwork.com/store/api/chihiro/00_11_000/container/GR/en/999/EP0001-NPEB00932_00-GASSASSINS000001&callback=?',
{},
function (data) {
$.each( data, function ( i, val ) {
var age_limit=val['age_limit'];
$(".age_limit").append(age_limit+'<br>');
});
})
});
});
</script>
</head>
<body>
<ul class="age_limit"></ul>
</body>
Working jsfiddle
Not working jsfiddle
我也尝试过使用 ajax 和纯 javascript 的 abole 示例,但结果是一样的。
sonyentertainmentnetwork 以某种方式阻止 json 作为 jsonp 远程访问还是什么?
谢谢。
【问题讨论】:
-
您使用的索尼 API 是否专门允许 JSON-P? API 必须实现 JSON-P 才能使其可用。检查 API 文档。
-
这个远程网址是否支持 JSONP?它需要将它返回的 JSON 数据包装在您(或 jQuery)指定的回调方法中,例如
myCallback({ "some": "data", "from": "the server" }) -
@compid 我认为没有关于 api 的任何文档。至少据我所知。
-
这是官方API吗?如果没有,您很可能无法通过 AJAX 检索数据。一种解决方法是构建一个后端,为您调用 API(JSON 代理)
-
@jandersen Eeem,很可能不会(!)。这就是它返回 {"codeName":"ResourceDoesNotExist"} 的原因。检查我的问题
标签: javascript json jsonp getjson