2013-03-30 33 views
0

(非常無知的問題,我自由承認)使用JavaScript進行REST調用而不使用JSON?

我有一個簡單的網頁,帶有一個按鈕和一個標籤。當我按一下按鈕,我想打一個REST調用到一個完全不同的域(跨域,我知道那麼多),並在標籤中顯示的結果(HTML)。

與其他的API,我使用JSON/P和添加元素的繞飛出場,但這個特殊的API不支持JSON,所以我不知道如何去成功打通。

我的代碼是:

function getESVData() { 
    $.get('http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=John+1', function (data) { 
     $('#bibleText').html(data); 
     app.showNotification("Note:", "Load performed."); 
    }); 
} 

我得到一個 「拒絕訪問」。無論如何,沒有JSON就能成功完成這個調用嗎?

+0

在這種情況下,你不能用AJAX做(直接)因爲他們沒有實現CORS。所以你必須編寫代理腳本,將其託管在你的服務器上,並向它發出AJAX請求。 – dfsq

回答

6

首先,JSON和JSONP是不一樣的。 JSON是表示信息的一種方式,JSONP是圍繞同源策略的破解。 JSONP通過請求來自另一個域的信息來工作,並且該域返回一個腳本,該腳本用該信息調用一個函數(使用您提供的名稱)。您確實在您的網站上執行了另一個域向您提供的腳本,因此您應該信任這個其他域。

現在試圖讓跨域請求時,你基本上有3種選擇:

  1. 使用JSONP。這具有侷限性,包括僅適用於GET請求的事實,以及您發送請求的服務器必須支持它。
  2. 做一個跨源資源共享(CORS)的請求。這也必須得到您發送請求的服務器的支持。
  3. 建立自己的服務器上的代理。在這種情況下,您在您的網站上設置了一個端點來簡單地中繼請求。即您從服務器請求信息,您的服務器從其他服務器獲取並將其返回給您。

對於您的情況,它的其他服務器沒有其他選項的支持,好像你將不得不去與選項3.

+1

關於#3,我相信現在已經有了一個現成的解決方案。嘗試查找SimplePHPProxy –

相關問題