Javascript $.getJSON(p)远程请求失败
我试图使用getJSON jquery方法从远程源检索json中的一些信息。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
无效的示例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>