我对JSON和JSONP很新。
我已经阅读了SO搜索推荐的每个帖子中的错误,但我似乎无法对其进行处理。
我有以下代码从EXTERNAL网站获取数据:
$.ajax({
url: "https://url.com/authenticate?login=test&apiKey=test",
dataType: 'jsonp',
success:function(json){
console.log("login successful");
}
});
当我加载页面时,我得到:
Uncaught SyntaxError: Unexpected token :
当我点击Chrome中的错误时,我看到了
{"Status":{"Code":"2","Message":"Authentication Succeeded","Success":"true"}}
在"true"})
从这一点来看,似乎我已成功登录,但我做错了其他事情,因为我的console.log("login successful");
从未触发过。我做错了什么?
我已经尝试了dataType: 'json'
,但我得到No 'Access-Control-Allow-Origin' header is present
因为我在另一台服务器上,所以我回到了jsonP,因为这是跨域的。
我已经尝试了上面的网址url: "https://url.com/authenticate?login=test&apiKey=test&callback=?",
因为我已经阅读了我需要回调,但我并不真正了解callback
的功能是什么无论哪种方式,返回的错误(无论&callback=?
是否存在)都是:
authenticateUser?login=test&apiKey=test&callback=jQuery111107732549801003188_1423867185396…:1 Uncaught SyntaxError: Unexpected token :
所以它以任何一种方式添加回调....
此外,从我尝试访问的API: "它使用REST协议,并提供结构化为XML或JSON"
的数据这不是链接帖子的重复,因为链接帖子中的信息很好地解释了JSONP 的内容,但没有回答我关于的具体问题为什么我收回数据(所以我的电话成功了),但为什么我仍然会收到错误并导致我的脚本停止。
答案 0 :(得分:1)
您发送AJAX请求的API并未实现JSONP。它忽略了callback=
参数,只返回普通的JSON。但是当浏览器尝试将其作为JSONP处理时,它会收到语法错误,因为它格式不正确。 JSONP是一个JSON对象,包含在对指定回调函数的调用中,例如:它应该发送回来:
jQuery111107732549801003188_1423867185396({...});
其中{...}
是您尝试检索的JSON对象。但它只是返回{...}
。
您应该在自己的服务器上使用PHP脚本实现此目的。它可以这么简单:
<?php
$username = urlencode($_POST['user']);
readfile("https://url.com/authenticate?login=$username&apiKey=test");
然后您的AJAX呼叫将是:
$.ajax({
url: "yourscript.php",
type: "post",
dataType: "json",
data: { user: "test" },
success: function(json) {
console.log("login successful");
}
});