2014-11-04 60 views
-1

在我的客户端html/JS代码中,我调用域内的外部API来获取json数据。其他API运行在一个单独的域中,所以基本上它不允许我使用常规的ajax/xhr请求。我们与API供应商达成一致的解决方案是他们支持jsonp。JSONP回调 - 使用jQuery调用时数据到达未转义

所以我送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,[email protected], 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) 
    } 
} 

解析函数抛出来自非转义字符(“)引起的异常出于某种原因。 ,似乎在返回到我的回调函数之前,返回的数据会被取消转义,因此我无法解析数据,并且遇到问题。

+2

为什么你有'contentType:“application/json; charset = utf-8”,'?这是一个GET请求。您没有请求主体来描述内容类型!为什么你有'processData:false','?你没有'data'参数来防止被处理! – Quentin 2014-11-04 16:41:23

+0

完整回复是什么样的? – Quentin 2014-11-04 16:42:14

+1

为什么你有'标题:{Authorization}:“NLAuth nlauth_account = xxxxxxx,nlauth_email = yyyyy @ pppp-zzzz.com,nlauth_signature = FGrmr5fjd” },'?您已经使用JSONP,您无法设置自定义HTTP标头。 – Quentin 2014-11-04 16:42:35

回答

0

最终我绕过这个问题,通过实现代理服务器,使ajax呼叫(没有CORS限制浏览器强制执行),我的客户呼叫是用于此代理服务器的。

当然,我ñ我的代理我实现返回Access-Control-Allow-Origin头与客户端域,以便此调用工作。