php剛使用沒幾天,也不是我主要的涉及,之前用的處理都忘得差很少了,可是解決了跨域後,使用jquery的ajax發現諸多問題,使用網頁和第三方post測試插件沒法獲取一致的響應?我的解決辦法,雖然比較low, 可是簡單用下是能夠的,固然有比較好的作法,我洗耳恭聽php
在不發生跨域問題的狀況下,使用$.ajax通常是能獲取到響應的html
$.ajax({ url:'index.php', data:{"data":{"name":"fred", "info":{"id":1,"cid":1009}}}, type:'POST', success:function(data){ alert(data); }, error(xhr){ alert('ERROR\n'+xhr.responseText) }
index.php
jquery
<?php header("Access-Control-Allow-Origin:*"); header("Content-Type:text/html;charset=utf-8"); echo $_POST['data']
默認狀況下,不指定Content-Type的$.ajax是以application/x-www-form-urlencoded形式提交的,而php的$_POST默認也只識別這種。ajax
可是經過第三方POST測試工具(好比PostMan等)發送application/x-www-form-urlencoded、raw-json、form-data都沒法獲取正確的響應 (格式不對、須要解碼等)json
也就是說用瀏覽器的跟工具是沒法統一的,這時候只需簡單作個判斷就能夠了跨域
/** * 本php只作post請求 */ $data = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "" ; if($data){ //若是$data不爲空,說明發送的實體在$GLOBALS["HTTP_RAW_POST_DATA"]中(即,有多是經過raw-json發過來的) $fd=json_decode($data,true);//解碼成array對象 //下面這句話是額外功能,可提交 帶"data"鍵也可不帶"data"的數據,最終都值獲取data對應的數據 //可是不修改默認contentType的話,經過$.ajax發送時必需要帶上"data" if(isset($fd['data'])){ $fd=$fd['data']; } }else{ $fd=$_POST['data']; if(!is_array($fd)){//若是post發過來的是string也,解碼成array對象 $fd=json_decode($fd,true); } } //$fd就是 {"name":"fred", "info":{"id":1,"cid":1009}} 不過是php的array("name"=>"fred",...)
好了,最後說個也是我遇到的問題:瀏覽器
在使用$.ajax,而且提交數據類型dataType設置爲json時,若是服務器端正確返回,前臺頁面獲取不到響應?服務器
其實這個時候服務器會把這些返回到$.ajax的回調error(xhr)中,經過xhr.responseText就能獲取到信息,這點還不太懂,若有大神知道的,告知一下,tks!app