1. 程式人生 > >AJAX跨域問題的解決方案

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");