$.ajax发送数据无法获取正确响应

亡梦爱人 提交于 2019-12-10 15:58:30

php刚使用没几天,也不是我主要的涉及,以前用的处理都忘得差不多了,但是解决了跨域后,使用jquery的ajax发现诸多问题,使用网页和第三方post测试插件无法获取一致的响应?个人解决办法,虽然比较low, 但是简单用下是可以的,当然有比较好的做法,我洗耳恭听

在不发生跨域问题的情况下,使用$.ajax一般是能获取到响应的

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

<?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默认也只识别这种。

但是通过第三方POST测试工具(比如PostMan等)发送application/x-www-form-urlencoded、raw-json、form-data都无法获取正确的响应 (格式不对、需要解码等)

也就是说用浏览器的跟工具是无法统一的,这时候只需简单做个判断就可以了

/**
*  本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!



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!