我试图使用来自远程源的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 apis尝试了相同的脚本并且工作正常 有效的示例网址:
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的例子,但结果是一样的 sonyentertainmentnetwork阻止json作为jsonp远程访问以某种方式或什么?
谢谢。
答案 0 :(得分:1)
您遇到此问题,因为JSON-P是服务器或API提供程序实现的功能。您使用的sony API没有实现JSON-P,因此您不能简单地在URL末尾添加&callback=something
以使JSON-P正常工作。
此问题的一种解决方法是让服务器后端向API发出请求(有效地创建代理)。当服务器在后端发出请求时,它不会遇到浏览器发生的Cross Origin问题。如果您不想设置自己的后端,有些服务可以提供此功能,但可能会有费用/限制。
jsonp.jit.su就是其中一种服务。 jsonp.jit.su实现了JSON-P,并且可以向不支持JSON-P的API发出请求。要使用它,只需将最终的API端点指定为url
参数,并将回调函数指定为callback
参数,如下所示: