AngularJS $http POST请求异常:返回[object Object]问题咨询
解决AngularJS $http POST到PHP时数据格式不匹配的问题
嘿,我来帮你搞定这个问题!你遇到的是AngularJS和PHP POST请求数据格式不兼容的典型情况,导致PHP拿不到正确的id值反而输出[object Object],我给你拆解下原因和两种靠谱的解决办法:
问题出在哪?
AngularJS的$http默认会把你传入的data对象序列化成JSON格式,并且自动设置请求头为Content-Type: application/json。但PHP的$_POST超全局变量只认application/x-www-form-urlencoded(普通表单编码)或者multipart/form-data格式的数据,根本不会主动解析JSON格式的请求体。
你看到的[object Object],大概率是PHP尝试输出一个不存在的$_POST['id']时,误把某个对象转成了字符串(另外提一句,你PHP里的is_post_quest()应该是拼写错了吧?改成is_post_request()或者直接用$_SERVER['REQUEST_METHOD'] === 'POST'更稳妥)。
办法一:让AngularJS发表单格式的数据
修改你的AngularJS请求代码,把数据转成表单键值对格式,同时设置正确的请求头:
$http({ method: "POST", url: "./forms/crud.php", data: `id=${encodeURIComponent(cId)}`, // 转成表单格式的键值对 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } // 告诉PHP这是表单数据 }).then(function (d) { alert(d.data); // 现在这里应该能拿到PHP输出的正确id了 console.log(d); });
PHP代码调整成这样(修正拼写错误):
if ($_SERVER['REQUEST_METHOD'] === 'POST') { echo $_POST['id']; }
办法二:让PHP主动解析JSON请求体
如果你想保留AngularJS默认的JSON发送方式,那就让PHP去读取原始请求体并解析成数组:
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 读取请求里的原始JSON数据 $rawRequest = file_get_contents('php://input'); // 把JSON转成关联数组 $postData = json_decode($rawRequest, true); // 输出id值 echo $postData['id']; }
这种情况下你的AngularJS代码完全不用改,保留原来的写法就行:
$http({ method:"POST", url:"./forms/crud.php", data:{id:cId} }).then(function (d) { alert(d.data); // 现在能正确拿到id了 console.log(d); })
小提示
- 你原来JS代码里的
type:"json"是无效的配置项,AngularJS的$http根本没这个参数,直接删掉就行。 - 调试的时候可以打开浏览器控制台的「网络」标签,看看请求的Payload和Request Headers,确认数据格式和Content-Type是不是正确,这招能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Kevin Yang
相关产品推荐
相关产品推荐

