2013-12-13 35 views
0

一切都在問題中。

我必須使用一個API,只允許我使用$ http.jsonp以角度發出請求。我從服務器獲得正確的響應,但角度認爲請求失敗,因爲我沒有使用callback=JSON_CALLBACK。當我在請求中添加回調時,服務器發送給我一個錯誤500,因爲它不允許除文檔中的參數以外的任何其他參數。

我該怎麼辦?林茫然

感謝

回答

1

爲了JSONP工作它需要服務器端支持。如果您使用的API不提供對JSONP的任何支持,那麼您將無法使用JSONP。

爲了讓JSONP工作,服務器必須包裝它在函數調用中返回的JSON。通常,支持JSONP的API將通過某種方式傳遞可用作回調函數的名稱。這不是標準的,每個API可能有不同的方式來指定回調。如果API不支持指定回調,那麼你確實運氣不好。

我能想到的唯一的其他事情是,如果服務器上的API支持CORS。與JSONP相比,CORS是一種更好的替代方案,可用於製作跨域請求,但僅適用於現代瀏覽器。

唯一的另一種選擇是代表瀏覽器擁有自己的服務器代理請求。這有缺點,即所有到第三方API的流量都必須通過您自己的應用程序域。

+0

最終我需要對該服務器發出「簡單」GET請求,但由於某些原因,當服務器發回500錯誤時,$ http.get()不起作用。我正在嘗試談論支持,但目前爲止沒有任何支持。謝謝你的解釋。將接受,如果沒有更好的出現 –

+1

服務器是在與您的應用程序相同的域?如果沒有,那麼$ http.get()將不起作用,除非服務器和瀏覽器都支持CORS。如果這是一個旨在從不同域使用的第三方庫,那麼他們幾乎肯定會支持JSONP。他們只需要告訴你如何在你的請求中發送回調。 – dtabuenc

+0

不,這是第三方。這是Withings API [鏈接](http://www.withings.com/en/api)我真的不確定他們是否支持JSONP。我認爲,他們也希望服務器到服務器的通信,而不是服務器到客戶端的通信......所以我可能最終不得不在我的服務器上設置一個地方...... –