JSONP回调-当使用jQuery调用时,数据到达时未被捕获

JSONP Callback - data arrives unescaped when using jQuery call

本文关键字:数据 JSONP 调用 jQuery 回调      更新时间:2023-09-26

在我的客户端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函数抛出了一个由未转义的字符(")引起的异常。出于某种原因,返回的数据似乎在到达回调函数之前就被取消了转义。因此,我无法解析数据,并面临一个问题。

最终我绕过了这个问题,实现了一个代理服务器来进行ajax调用(没有浏览器强制执行的CORS限制),而我的客户端调用就是针对这个代理的。

当然,在我的代理中,我实现了返回客户端域的Access Control Allow Origin标头,以便此调用正常工作。