2010-11-23 41 views
2

我想從遠程服務器調用JSON數據,但服務器不返回有效的JSONP形成的數據,只有有效的JSON數據。 (驗證器確認)沒有JSONP的getJSON遠程請求 - 服務器

如果我使getJSON請求(與&回調=?),我得到有效的JSON返回,但它沒有觸發回調函數,因爲它不是有效的JSONP。

有什麼好方法可以訪問返回的JSON數據嗎?

+0

您是否在控制遠程服務器?您是否無法通過服務器腳本調用遠程服務器? – Philar 2010-11-23 18:06:22

+0

如果您還可以請提及遠程服務器的網址 – Philar 2010-11-23 18:07:29

回答

2

不,它必須是JSONP數據,因爲整個事情是如何工作的,它基本上包括一個JavaScript文件,通過創建一個<script>標籤...並且該響應必須是有效的JavaScript,一個對象字面量(本身)是無效的JavaScript。

想想另一種方式:如果我們可能從從遠程服務器獲取JSON,爲什麼JSONP存在? :)

1

那麼首先,如果您的服務器獲取JSON不支持JSONP,那麼您將不得不使用代理。如果它確實支持JSONP,則應該像下面的示例那樣格式化您的請求。當你不指定在$ .getJSON回調(?...... &回調=),那麼你的要求是這樣的:

http://someurl?callback=123489234982 

與它的結束有些可笑號碼,它使你的生活痛苦。所以,你應該指定一個回調和格式化你的代碼如下所示:

<script> 
    $.getJSON("your url?callback=callbackName", ....); 

    function callbackName { do what you want with the json in here } 
</script> 

如果不工作,那麼您的服務器不支持JSONP :(這裏是你可以使用一個PHP代理鏈接是相當不錯的,有大量的文件。

http://benalman.com/projects/php-simple-proxy/

2

是的,它吸收。我在與Viddler API(瀏覽器端)相同的問題。它發送JSON數據傳回,但不是在腳本JSON -P接口。

因此,你有兩個操作tions:

  1. 正如人們所說的,使用後端代理來請求服務器端。
  2. 如果您只需要支持一個瀏覽器(我的情況爲Chromium),請使用類似「chromium-browser --disable-web-security」的內容來禁用「same-origin-policy」規則。這將允許您提出跨域請求,但僅限於此特定情況。

祝你好運!

相關問題