$.ajax發送數據沒法獲取正確響應

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

相關文章
相關標籤/搜索