通过JQuery的$.ajax()把 json 数据 post 给 PHP时的几种情况:

无法在PHP中通过$_POST 以及 $_REQUEST 获取json数据,即

$json = $_POST['json'];  // empty($json) 为1
注:PHP 默认只识别 application/x-www.form-urlencoded 标准的数据类型,因此,对型如 text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用 $_POST 数组来接收就会失败。

情况A:

js里没有加入属性contentType: "application/json; charset=utf-8",

var submit_sync = function() {
$.ajax({
type: "post",
url: 'add-post-json.php',
async: false, // 使用同步方式
// 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...
// 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}
data: JSON.stringify({
a: parseInt($('input[name="a"]').val()),
b: parseInt($('input[name="b"]').val()),
now: new Date().getTime() // 注意不要在此行增加逗号
}), dataType: "json",
success: function(data) {
$('#result').text(data.result);
} // 注意不要在此行增加逗号
});
}
  • 使用 $GLOBALS['HTTP_RAW_POST_DATA'] 后无法获取到数据,即
  • $json = $GLOBALS['HTTP_RAW_POST_DATA']; // empty($json) 为 1
    • 使用file_get_contents("php://input"); 可以获取数据,即
    • $json = file_get_contents("php://input");   // empty($json) 为 0
    • 情况B:

    • js里加入属性contentType: "application/json; charset=utf-8",
    • var submit_sync = function() {
      $.ajax({
      type: "post",
      url: 'add-post-json.php',
      async: false, // 使用同步方式
      // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...
      // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}
      data: JSON.stringify({
      a: parseInt($('input[name="a"]').val()),
      b: parseInt($('input[name="b"]').val()),
      now: new Date().getTime() // 注意不要在此行增加逗号
      }),
      contentType: "application/json; charset=utf-8",
                  dataType: "json",
      success: function(data) {
      $('#result').text(data.result);
      } // 注意不要在此行增加逗号
      });
      }
      • 使用 $GLOBALS['HTTP_RAW_POST_DATA'] 后可以获取到数据,即
      • $json = $GLOBALS['HTTP_RAW_POST_DATA'];  // empty($json) 为 0
        • 使用file_get_contents("php://input"); 可以获取数据,即
        • $json = file_get_contents("php://input");   // empty($json) 为 0
        • 注:php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。

最新文章

  1. [OpenCV] Convolutional Neural Network
  2. winFrom 常用控件属性及方法介绍
  3. 黄聪:说说JSON和JSONP,也许你会豁然开朗(转)
  4. ubuntu 12.04 安装 redis
  5. Gnome创建桌面快捷方式
  6. JS中对象与字符串的互相转换
  7. phpcms 修改后台 主页面的模板
  8. CodeForces 489B (贪心 或 最大匹配) BerSU Ball
  9. HDU2544最短路(dijkstra)
  10. SRM 399(1-250pt)
  11. 设置checkbox为只读(readOnly)
  12. 第十二节:MVC中的一些特殊优化
  13. 【转】 HDMI介绍与流程
  14. L330 Black hole picture captured for first time in space ‘breakthrough’
  15. android 应用程序中执行Linux 命令
  16. python基础一数据类型之字符串
  17. python tqdm函数
  18. Church 整数前驱的推导
  19. ue4 TimeRemaining(ratio)找不到的问题
  20. Squid代理服务器(四)——反向代理

热门文章

  1. vue 移动端轻量日期组件不依赖第三方库
  2. 【IDEA填坑】springboot整合ssm框架
  3. The innodb_system data file 'ibdata1' must be writable
  4. markdown在线编辑插件mditor
  5. 免费赠送原创的opengl电子书教程和案例源码
  6. 浏览器与WEB服务器交互
  7. jdbc模板
  8. RESTful设计
  9. Centos 安装dhcp及简单配置
  10. 大数据面试题——如何找出访问最多的IP