首先:什麼是跨域?
cross domain request:從乙個資源請求另乙個資源,二者所在的請求位址不同,網域名稱不同、埠號不同、請求協議不同。
它是由瀏覽器的同源策略造成的,是瀏覽器對j**ascript施加的安全限制。
關於同源策略 這裡推薦感興趣的可以去 阮大的部落格檢視 阮一峰的個人部落格
如何區分當前的請求是跨域請求?
在前端使用xhr物件發起請求時 瀏覽器 會將請求的傳送位址和請求位址 的 協議 網域名稱 埠號 做 字串的匹配
瀏覽器允許跨域請求的情形:
img、link、script、iframe ...
瀏覽器禁止跨域請求的情形:
xhr —— 瀏覽器處於安全考慮,禁用了xhr的跨域請求(其實伺服器給出了響應訊息,但瀏覽器不讓使用)
如何解決瀏覽器的xhr跨域請求限制?
網上有關解決跨域請求的方法五花八門,這裡僅僅列出常用的兩種
1)、修改響應訊息頭部,新增access-control-allow-origin頭部 伺服器端新增響應頭部
2)、使用jsonp
jsonp:json with padding,填充式json,與json完全兩碼事,是一種使用json資料的方式。意思是在json字串左右新增函式名: doresponse();
通常我們使用 script 標籤獲取並執行一段js** 而scrip標籤和所以擁有src屬性的元素一樣 不受瀏覽器同源策略的影響;
如果我們請求的是 doresponse(
data ) 同時本地建立了乙個 doresponse 函式
結果 就是直接呼叫了 doresponse 函式 並在其引數組中獲得了 我們需要的資料 data
傳送jsonp請求jquery中如何使用jsonp發起非同步請求:
(1) $.getjson()
用途1:使用xhr發起非同步請求(不能跨域)
$.getjson('x.php', doresponse)
用途2:使用jsonp發起跨域非同步請求
(2) $.ajax() 推薦
用途1:使用xhr發起非同步請求(不能跨域)
$.ajax()
用途2:使用jsonp發起跨域非同步請求
$.ajax()
jquery 中極度簡化了 script 獲取後端響應資料的過程 但原理都是一樣的;
JSONP跨域請求
看到jsonp我們會很自然的想到json,但它們卻有很大的不同,json是一種輕量級的資料交換格式,而jsonp可以說是一種非官方的資料互動協議。jsonp json with padding 利用jsonp可以從別的網域名稱下獲取資料,即跨域獲取資料。由於同源策略不允許xmlhttprequest...
JSONP跨域請求
前端常用ajax請求來實現不重新整理頁面方式向伺服器請求資料,但它受瀏覽器同源策略的影響而無法實現跨域請求。然而script標籤src屬性的引用卻是不受跨越限制的,基於此可以傳送跨域請求,服務端不再是返回json格式的資料,而是返回一段呼叫某個函式的js 在src中進行了呼叫。您所在的城市天氣情況 ...
jsonp跨域請求
ajax是不能跨域的,但是利用jsonp是可以實現跨域的,博主今天記錄一篇jsonp跨域的例項。通俗的說,就是利用的特殊性去請求伺服器,伺服器返回josnp格式資料,jsonp資料格式 function json 換句話說,就是把json資料報裝在乙個函式引數中返回,然後呼叫本地js中的functi...