JSONP回调 - 使用jQuery调用时数据无法转义

时间:2014-11-04 16:37:24

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

1 个答案:

答案 0 :(得分:0)

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

当然,在我的代理中,我实现了使用客户端域返回Access-Control-Allow-Origin标头,以使此调用有效。