首先我們來說說什麼是跨域 跨域:是指從一個功能變數名稱的網頁去請求另一個功能變數名稱的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。但是一般情況下不能這麼做,它是由瀏覽器的同源策略造成的 這裡我們又會有一個問題 啥叫同源策略啊,那我們再來說說同源策略, 首先什麼叫同源呢 ...
首先我們來說說什麼是跨域
跨域:是指從一個功能變數名稱的網頁去請求另一個功能變數名稱的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。但是一般情況下不能這麼做,它是由瀏覽器的同源策略造成的
這裡我們又會有一個問題 啥叫同源策略啊,那我們再來說說同源策略,
首先什麼叫同源呢 字面理解就是相同的起源,同源指的就是功能變數名稱,協議,埠均相同
那現在又有一個問題,為什麼瀏覽器要有同源策略呢,我打個比方 。。。。。。。。。。嘀 嘀嘀 準備發車了
舉個大慄子:你和你對象是一家 ,隔壁是老王一家,你每天可以回家和你對象做一些有趣的事情(你們懂得),要是老王也可以回你家和你對象做一些有趣的事情,那你能同意嗎?
肯定不能啊,對吧(要是你就喜歡做一道綠光,那在下佩服)
整個慄子里,你家就相當於一個功能變數名稱,而你和你對象就相當於功能變數名稱裡面的資源,而老王家也相當於一個功能變數名稱,老王和老王對象相當於老王家這個功能變數名稱下的資源,
正常情況下是肯定不能互相訪問的,這就是同源策略所做的事情,讓不同功能變數名稱間不能亂訪問互相的資源
但是我們能不能繞過同源策略訪問到呢,當然可以啊,要是不可以的話,偷情這個詞豈不是失去了意義,那現在我們來講一種跨域的方法:jsonp
jsonp是一種非正式的傳輸協議(註意他和json 輕量級的數據交換格式半毛錢關係都沒有)
原理:利用了src不受同源策略的影響 ,可以訪問其他頁面的數據
大家需要註意一點:jsonp並不能解決所有的跨域問題,因為使用jsonp跨域需要被提供jsonp介面
步驟:1.創建一個全局函數
function huidiao(data){
console.log(data)}
2.動態創建一個script標簽
var script1 = document.createElement("script")
3.給標簽的src賦值 (即介面的url)
script1.src = "http:www.baidu.com?a=1&b=2&cb=huidiao"
4.將屬性為callback值為全局函數名的鍵值對寫到url的後面
註意 huitiao即為全局函數的名稱 二者名字只要相對應就可以
大部分jonsp介面都為callback,百度的jsonp介面為cb
5.將標簽插入到頁面上
document.body.appendChild(script1);
6.將標簽載入完後刪除
script1.onload = function(){
this.remove()}
---------------------------------------------------------------------------上---------面-----------見----解----如-------有----------錯-------誤----,----請----各----位----大--------佬-----指-------正---------------------------------------------------------------------------