2014-11-04 55 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頭與客戶端域,以便此調用工作。