$ .getJSON(p)远程请求失败

时间:2014-05-15 01:25:13

标签: javascript json jsonp getjson

我试图使用来自远程源的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远程访问以某种方式或什么?

谢谢。

1 个答案:

答案 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参数,如下所示:

http://jsonp.jit.su/?callback=myCallback&url=https%3A%2F%2Fstore.sonyentertainmentnetwork.com%2Fstore%2Fapi%2Fchihiro%2F00_09_000%2Fcontainer%2FGR%2Fen%2F999%2FEP0001-NPEB00932_00-GASSASSINS000001