平時項目中處理ajax跨域資源請求時,例如www.example2.com上的某個頁面要請求www.example1.com的數據,咱們使用得較多的是jsonp方式。jsonp經過JavaScript callback的形式實現跨域訪問,其實現原理是:前端
在 Web 頁面中插入動態腳本元素,該頁面源指向其餘域中的服務 URL 而且在自身腳本中獲取數據。腳本加載時它開始執行。該方法是可行的,由於同源策略不阻止動態腳本插入,而且將腳本看做是從提供 Web 頁面的域上加載的。經過script標籤實現跨域請求,而後在服務端輸出JSON數據並執行回調函數,從而解決了跨域的數據請求。jquery
前端使用jsonp的demo:ajax
1. 使用jquery或zeptojson
其中callback是前端準備好的回調函數,在ajax請求中,會附加在get請求url的參數後面。服務器端以JavaScript語法的方式生成一個function,function的名字就是傳遞過來的callback。如getresult.cgi返回如下結果:跨域
callback({'ret':0, 'data':[]});瀏覽器
客戶端瀏覽器解析script標籤(jqeury和zepto的實現代碼中,動態生成了script標籤並添加到頁面中),並執行返回的JavaScript語句。服務器
2. 直接建立script標籤函數
在須要跨域請求的地方,動態建立script標籤,並添加到頁面中。jsonp
腳本加載後當即執行callback,即實現了跨域請求。url
注意:jsonp只能處理get請求。