1. 程式人生 > >ajax跨域請求解決方案

ajax跨域請求解決方案

tro cti jquer 解決方案 tab all ajax跨域 自帶 b-s

大家好,今天我們學習了js的跨域請求的解決方案,由於JS中存在同源策略,當請求不同協議名,不同端口號、不同主機名下面的文件時,將會違背同源策略,無法請求成功!需要進行跨域處理!

方案一、後臺PHP進行設置,

前臺無需任何設置,在後臺被請求的PHP文件中,寫入一條header

header("Access-Control-Allow-Origin:*");

表示允許那些域名請求這個PHP文件*表示所有域名都允許

這是最佳的解決方案,因為是在後臺進行設置,不對外公開,所以更加安全,

方案二、使用src請求+JSONP實現跨域

* ①擁有src屬性的標簽自帶跨域功能,所有可以使用script標簽的src屬性請求後臺數據。

* <script src="http://127.0.0.1/json/php" type="text/javascript" charset="utf-8"> </ script>

* ②由於src在加載數據成功後,會直接將加載內容放入到script標簽中,

* 所以後臺直接返回JSON字符串將不能再script標簽中解析。。

* 因此後臺應該返回給前臺一個回調函數名,並將json字符串作為參數調用

* 從後臺PHP文件中國返回:echo "callBack({$json})";

③前臺接收到返回的回調函數時,回調函數將直接在script標簽中調用,因此需要聲明這樣一個回調函數,作為請求成功的回調。

eg:

$.ajax({
                method:"post",
                url:"http://127.0.0.1/json/php",
                dataType:"jsonp",
                success:function(data){
                    console.log(data);
                    console.log($str[1].name)
                }
            
            });

方案三、JQuery的AJax實現JSONP

①在ajax請求是,設置datatype為"jsonp"

②後臺返回是,依然需要返回回調函數。但是,ajax在發送請求是惠默認使用get請求回調函數名發給後臺,後臺可以使用echo $_GET[‘callback‘]取出回調函數名,這樣前臺可以使用ajax的success函數作為成功的回調。

echo "{$_GET[‘callback‘]}({$str})";

③後臺返回以後,Ajax依然可以使用success作為成功的回調函數;

success:function(data){}

當然後臺也可以隨便返回一個回調函數名,echo"callBack({$str})",

前臺只要請求成功,就會自動調用這個函數。類似以第二條的②③步

<script src="http://127.0.0.1/json/php" type="text/javascript" charset="utf-8">

ajax跨域請求解決方案