Javascript JSONP回调-当使用jQuery调用时,数据到达时不带scaped
在我的客户机html/JS代码中,我从域内调用外部API来获取json数据。另一个API在单独的域中运行,因此基本上不允许我使用常规ajax/xhr请求。我们与API供应商商定的解决方案是他们支持jsonp 因此,我发送了一个jsonp请求,如下所示:Javascript JSONP回调-当使用jQuery调用时,数据到达时不带scaped,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,在我的客户机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=
$.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函数引发由字符(“)引起的异常没有转义。出于某种原因,似乎返回的数据在到达回调函数之前没有转义。因此,我无法解析数据,并面临一个问题。最终我绕过了这个问题,实现了一个代理服务器来进行ajax调用(没有CORS限制),而我的客户端调用是针对此代理的
当然,在我的代理中,我实现了通过客户端域返回Access Control Allow Origin头,以便此调用能够工作。为什么有
contentType:“application/json;charset=utf-8“,
?这是一个GET请求。您没有一个请求正文来描述的内容类型!为什么您有processData:false,
?您没有data
参数来阻止被处理!完整的响应看起来像什么?为什么您有头:{“授权”:NLAuth NLAuth_帐户=xxxxxxx,NLAuth_电子邮件=yyyyy@pppp-zzzz.com,nlauth_signature=FGrmr5fjd“},
?您使用了JSONP,无法设置自定义HTTP头。为什么要在URL中硬编码回调名称?为什么要尝试使用JSONP:“回调”覆盖(不存在)动态生成的回调名称“
?JSONP调用返回一个对象,它不是字符串!jQuery不解析它,所以您尝试做的事情是行不通的。