前兩天被問到ajax跨域如何解決,還真被問住了,光知道有個什麼jsonp,迷迷糊糊的沒有說上來。抱著有問題必須解決的態度,我看了許多資料,原來如此。。。
為何一直知道jsonp,但一直迷迷糊糊的不明白呢?——網上那些介紹資料都寫的太複雜了!
我是能多簡單就多簡單,爭取讓你十分鐘看完!
ajax之所以需要「跨域」,罪魁禍首就是瀏覽器的同源策略。即,乙個頁面的ajax只能獲取這個頁面相同源或者相同域的資料。
如何叫「同源」或者「同域」呢?——協議、網域名稱、埠號都必須相同。例如:
和 不同,因為協議不同;
http://localhost:8080 和 http://localhost:1000 不同,因為埠不同;
http://localhost:8080 和 不同,協議、網域名稱、埠號都不同,根本不是一家的。
根據同源策略,我自己做的乙個網頁 http://localhost:8080/test.html 就無法通過ajax直接獲取 的資料。
例如,我用ajax去訪問乙個不同域的頁面,錯誤結果是這樣的:
但是跨域訪問是少不了的,mail.163.com 的網頁可能需要從 news.163.com 域下獲取新聞資訊,那怎麼辦?——開始咱們的跨域之旅。(當然用iframe也可以實現)
你再想想「盜鏈」和「同源策略」這兩個詞之間有什麼關係?——對,矛盾!既然都「同源策略」了,怎麼還能「盜鏈」呢?
世間萬物都有矛盾,有矛盾了照樣可以和諧共處,並不一定非要你死我活。
重點:
的src(獲取),的href(獲取css),
至於callback引數後台如何接收,如何使用,請接著看:
在 b.com 下增加乙個 b.com/data.aspx 頁面,後台**如下:
protected void page_load(object sender, eventargs e)}}**很簡單,獲取callback引數,然後組成乙個函式的形式返回。如果「b.com/data.aspx?callback=myfn」呼叫的話,那麼返回的就是" myfn(1024) "。
返回的資料變成動態的了(「1024」),前端頁面用於顯示資料的函式也程式設計了動態的了(「callback=myfn」),但是歸根結底,形式還是一樣的。
引導第六步:呼叫封裝
a.com/test.html 中,僅僅有乙個靜靜的躺在那裡,執行一次之後,就沒有作用了。
而實際情況是,a.com/test.html 中,可能隨著使用者的操作發生若干次的呼叫。怎麼辦?——動態增加唄。
function addscripttag(src)以上層層描述的就是jsonp,你不必去記住它的定義,看明白了上述文字,就全能理解。function myfn (data)
//需要呼叫時:
重點在於:同源策略 + 的src不屬於同源策略 + 通過的src指向的檔案返回伺服器端資料。
ok,就這些!
引用自:
JS跨域請求 Ajax跨域請求JSONP
前兩天被問到ajax跨域如何解決,還真被問住了,光知道有個什麼jsonp,迷迷糊糊的沒有說上來。抱著有問題必須解決的態度,我看了許多資料,原來如此。為何一直知道jsonp,但一直迷迷糊糊的不明白呢?網上那些介紹資料都寫的太複雜了!我是能多簡單就多簡單,爭取讓你十分鐘看完!ajax之所以需要 跨域 罪...
Ajax跨域請求
一 什麼是跨域請求 網域名稱它由http 協議 www 子網域名稱 baidu 主網域名稱 以及8080 埠號 組成,當另乙個網域名稱與其中任意一項對應不等的話,那麼我們說兩個網域名稱就是跨域的。如的頁面上我們要請求資料到上去,那麼就說這種請求是跨域請求。二 為什麼要講跨域請求 因為在一般的請求條件...
Ajax 跨域請求
隨筆 71 文章 0 客戶端js 服務端 1 string callbackfunname context.request callbackparam 2 context.response.write callbackfunname ps 客戶端的jsonp引數是用來通過url傳參,傳遞jsonpc...