AJAX跨域問題的解決方案
跨域:
是兩個不在同一個伺服器環境下的兩個網頁之間的相互之間的互動,瀏覽器預設阻止,這就要跨域。
如何解決跨域問題:
解決跨域問題一共四個方法:
一、原生的JS解決方法------->針對get方法
在script標籤裡的src屬性裡寫入要跨域的伺服器地址
jsonp跨域訪問原理:
本地利用src訪問伺服器,提交一個callback引數
伺服器返回callback值加上一個括號方法呼叫,並傳入引數
這樣,就能實現呼叫本地的JS方法,同時獲取伺服器傳入的引數
二、jQuery封裝好的jsonp跨域------->針對get方法
url--->跨域訪問的伺服器地址
dataType----->必須是jsonp
在success的回撥方法裡面接收返回的資料即可,伺服器那邊還是jsonp的資料格式寫法
(注意:)此種方法只針對get方式,就算是把type改成post,也是預設get方法。
JQ的ajax的跨域屬性:
jsonpCallback:如果定義屬性,則預設是callback=jQuery1111............(系統預設建立的一個函式名)
jasonpCallback:"show",------->可以自定義函式名
jsonp:用來修改callback這個部分的名字,某些伺服器的jsonp跨域是根據callback獲取的,但有些伺服器的鍵不是叫callback,所以要利用這個屬性把callback修改了。
三、cross新增響應頭跨域------>針對get方式
在伺服器端:
//此響應頭表示允許哪一個域名過來跨域
response.addHeader("Access-Control-Allow-Origin","*");// * 表示允許所有客戶端過來訪問
response.addHeader("Access-Control-Allow-Origin","http://localhost:63342");//表示只允許http://localhost:63342的域名訪問
四、cross新增響應頭跨域------>針對post方式
如果post方式跨域添加了response.addHeader("Access-Control-Allow-Origin","*");還是不行的話,就要繼續加
完整的響應頭:
response.addHeader("Access-Control-Allow-Origin","*");
response.addHeader("Access-Control-Allow-Method","post");
response.addHeader("Access-Control-Max-Age","2000");