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

Javascript $.getJSON(p)远程请求失败,javascript,json,jsonp,getjson,Javascript,Json,Jsonp,Getjson,我试图使用getJSON jquery方法从远程源检索json中的一些信息。 无效的示例url: https://store.sonyentertainmentnetwork.com/store/api/chihiro/00_09_000/container/GR/en/999/EP0001-NPEB00932_00-GASSASSINS000001 $(document).ready(function(){ $(function() { $.getJSON('http

我试图使用getJSON jquery方法从远程源检索json中的一些信息。
无效的示例url:

https://store.sonyentertainmentnetwork.com/store/api/chihiro/00_09_000/container/GR/en/999/EP0001-NPEB00932_00-GASSASSINS000001
$(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>
当上述url设置为json时,由于跨源策略而失败。
因此,使其成为jsonp请求(在url末尾添加&callback=?)不会返回任何结果。
我注意到,对于jsonp请求,请求通过(等待浏览器上的store.sonyententainmentnetwork.com),但没有返回任何内容。
还注意到,当浏览器中的jsonp url enter返回以下字符串时:

{"codeName":"ResourceDoesNotExist"}
$(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>
我用yahoo json API尝试了相同的脚本,效果很好。
有效的示例url:

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>
代码:

$(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>
$(文档).ready(函数(){
$(函数(){
$.getJSON('https://store.sonyentertainmentnetwork.com/store/api/chihiro/00_11_000/container/GR/en/999/EP0001-NPEB00932_00-GASSASSINS000001&callback=?',
{},
功能(数据){
$。每个(数据、函数(i、val){
var年龄上限=val[“年龄上限];
$(“.age\u limit”).append(age\u limit+”
); }); }) }); });

    $(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>
    
    我还尝试了abole示例作为ajax和纯javascript,但结果是一样的。
    SonyEntainmentNetwork是否以某种方式阻止json作为jsonp远程访问

    $(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>
    

    谢谢。

    您遇到了这个问题,因为JSON-p是由服务器或API提供程序实现的功能。您使用的sony API没有实现JSON-P,因此您不能简单地在URL末尾附加
    &callback=something
    ,以使JSON-P正常工作

    $(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>
    
    解决此问题的一个方法是使用服务器后端向API发出请求(有效地创建代理)。当服务器在后端发出请求时,它不会遇到浏览器所遇到的跨源问题。如果您不想设置自己的后端,那么有一些服务提供此功能,尽管可能有费用/限制

    $(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>
    
    jsonp.jit.su就是这样的服务之一。jsonp.jit.su实现JSON-P,可以向不支持JSON-P的API发出请求。要使用它,只需将您的最终API端点指定为
    url
    参数,并将回调函数指定为
    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>
    

    您使用的索尼API是否专门允许JSON-p?API必须实现JSON-P才能使用。检查API文档。这个远程url支持JSONP吗?它需要将返回的JSON数据封装在您(或jQuery)指定的回调方法中,例如
    myCallback({“some”:“data”,“from”:“the server”})
    @compid我认为没有任何关于api的文档。至少据我所知,这是官方API吗?否则,很可能无法通过AJAX检索数据。一个解决方法是构建一个后端,为您调用API(JSON代理)@jandersen-Eeem,很可能不会(!)。这就是它返回{“codeName”:“ResourceDoesNotExist”}的原因。检查我的问题请求通过使用。。。但是返回大量“未定义”的html。但这可能是我的脚本错误。我在回答中给出的URL你应该为你在问题中提供的URL工作。你可能需要对它进行URL编码。好吧,我只有在用尽所有其他方法之后才会使用这个方法。尽管如此,我还是会接受你的回答,因为它解决了我问题中的问题。谢谢实际上这不起作用,因为url没有返回有效的json。整个脚本必须在[]内才能有效。这就是我得到未定义响应的原因(?)是的,我定义了一个变量,比如var jsoned=[data];然后$.each(jsoned,function(i,val){…和以前一样}工作。
    $(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>