ajax跨域請求解決方案
大家好,今天我們學習了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跨域請求解決方案