$.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

相关文章
相关标签/搜索