content-type为"application/json"的$_POST接受不到数据问题
分类:PHP相关
时间:2023-03-28 22:42
浏览:0
评论:0
ajax默认是以application/x-www-form-urlencoded方式提交。也就是常见的表单提交方式。在PHP中使用$_POST方式可以轻松获取。
但如果将ajax的请求头强制指定为application/json,那么你的$_POST就接受不到了。必须使用$GLOBALS['HTTP_RAW_POST_DATA']取出来,然后再json_decode就行了。
如fetch、axios默认的请求头就是application/json,所以要注意一下。
还有一些的细节需要了解一下
1、后端必须允许前端定义Content-Type之类的头请求。
header('Access-Control-Allow-Headers:x-requested-with,content-type');
2、php中exit的输出只允许字符串。所以要输出什么之前最好使用(string)转义一下。
3、如果使用ajax的application/json方式,记得data参数是字符串类型的。使用JSON.stringify()转换一下。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script> </head> <body> <script> $(function () { $.ajax({ type:"post", url:"http://localhost:8080/news.php", data: JSON.stringify({ newsid: 101 }), headers: { "Content-type": "application/json; charset=utf-8" }, success: function (data) { console.log(data) } }) }) </script> </body> </html>
PHP代码:
<?php header("Access-Control-Allow-Origin:*"); header('Access-Control-Allow-Headers:x-requested-with,content-type'); $rws_post = $GLOBALS['HTTP_RAW_POST_DATA']; $mypost = json_decode($rws_post); $newsid = (string)$mypost->newsid; exit($newsid);
1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. PHP相关 > content-type为"application/json"的$_POST接受不到数据问题
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. PHP相关 > content-type为"application/json"的$_POST接受不到数据问题