天天看點

javascript加RoR實作JSONP

我們知道不同域中的js代碼受同源政策的限制,不同域中的ajax同樣受此限制,不過使用html中的script遠端腳本可以跳過該限制,下面我們實際看一下利用ror和js如何實作所謂的jsonp。

這裡隻是簡單地示範一下功能,并沒有嚴格的實作jsonp,如果是那樣需要用一個函數包容json對象主體:

而這裡的包容函數名稱也不需要定死,而是可以通過http參數告知web伺服器,比如可以用以下url的方式:

當然這隻是一個約定,你可以用其他任意的方式告知伺服器。

我們下面實作一個不嚴格的jsonp。首先用如下指令建立新的ror網站:

在service控制器的func0方法中增加如下代碼:

然後在rails的app/views/service目錄中添加func0.js.erb檔案,内容如下:

注意因為我們在func0中傳回的response不是一個html頁面,是以正常的通過url通路func0會出錯的:

下面我們建立一個本地html檔案,内容如下:

如果直接打開該頁面會出錯,因為你在伺服器端沒對此action關閉外聯保護,在ror中顯示如下錯誤:

我們隻需要對func0 action關閉保護即可:

注意config中的保護也是要關閉的:

然後再次在浏覽器中打開本地html檔案,成功執行了web伺服器中傳回的js腳本,該腳本能做的事隻受限于想象力而已。

繼續閱讀