我們知道不同域中的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腳本,該腳本能做的事隻受限于想象力而已。