在我的客户端html / JS代码中,我从域内调用外部API来获取json数据。另一个API在一个单独的域中运行,所以基本上它不允许我使用常规的ajax / xhr请求。我们与API供应商达成一致的解决方案是他们支持jsonp。
所以我发送一个jsonp请求如下:
$.ajax({
url: "https://rest.somevendor.com/app/site/hosting/restlet.nl?script=204&deploy=1&cid=436&callback=myCallBack",
dataType: 'jsonp',
type: 'GET',
jsonp: "callback",
contentType: "application/json; charset=utf-8",
processData: false,
headers: {
"Authorization": "NLAuth nlauth_account=xxxxxxx,nlauth_email=yyyyy@pppp-zzzz.com, nlauth_signature=FGrmr5fjd"
},
success: function(data){
//console.log(data);
}
});
使用json数据调用我的回调,但是存在问题。 当我从浏览器REST客户端进行相同的调用时,我得到一个有效的json,它被转义。但是,当我从我的客户端代码进行相同的调用时,我会在回调函数中找回数据:
function myCallBack(data) {
jsonString="";
try{
jsonString=JSON.parse(data);
}catch(err) {
alert(err.message)
}
}
parse函数抛出由未转义的字符(")引起的异常。出于某种原因,似乎某些方式返回的数据在到达我的回调函数之前未被转义。因此,我无法解析数据,并面临一个问题。
答案 0 :(得分:0)
最终我绕过了这个问题,通过实现一个代理服务器进行ajax调用(没有强制执行CORS限制),我的客户端调用是针对这个代理的。
当然,在我的代理中,我实现了使用客户端域返回Access-Control-Allow-Origin标头,以使此调用有效。