Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSONP回调-当使用jQuery调用时,数据到达时不带scaped_Javascript_Jquery_Ajax_Json_Jsonp - Fatal编程技术网

Javascript JSONP回调-当使用jQuery调用时,数据到达时不带scaped

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=

在我的客户机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头,以便此调用能够工作。

为什么有
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不解析它,所以您尝试做的事情是行不通的。