通过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"。

通过JQuery的$.ajax()把 json 数据 post 给 PHP的更多相关文章

  1. jquery实现ajax,返回json数据

    jquery实现ajax可以调用几种方法 我经常用的是$get(url,data,callback,type)方法 其中url是异步请求的页面(可以是.ashx文件),data是参数,callback ...

  2. html、css/bootStrap、js/Jquery、ajax与json数据交互总结

    设计个个人网站,利用CSS.JavaScript.HTML5.jQuery库和AJAX等 实现网站各功能模块,下面介绍我设计的网站各大功能模块:  个人简历模块: 包涵个人基本信息(利用CSS的flo ...

  3. Jquery请求Ajax的json数据

      获得单个json对象 $.getJSON("test.js", { name: "John", time: "2pm" }, funct ...

  4. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

  5. 通过Jquery中Ajax获取json文件数据

    1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...

  6. jquery ajax返回json数据进行前后台交互实例

    jquery ajax返回json数据进行前后台交互实例 利用jquery中的ajax提交数据然后由网站后台来根据我们提交的数据返回json格式的数据,下面我来演示一个实例. 先我们看演示代码 代码如 ...

  7. ThinkPHP中使用ajax接收json数据的方法

    本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先 ...

  8. (转)springMVC框架下JQuery传递并解析Json数据

    springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...

  9. Struts2.5 利用Ajax将json数据传值到JSP

    AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

随机推荐

  1. python--多线程多进程

    一.进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程.进程是很多资源 ...

  2. js中的forEach/map方法

    // forEach方法 var data = [{ name: "程咬金", sex: "1", age: 26 }, { name: "程才&qu ...

  3. day 11 装饰器

    1.day 10 内容复习 # 之前做得的题 以后再遇到能保证会 # 下周二考 :所有的知识 # 面试题:认真对待 # # 三元运算符 # 接收结果的变量 = 条件为真的结果 if 条件 else 条 ...

  4. python数据结构与算法之单链表

    表的抽象数据类型 ADT list:                      #一个表的抽象数据类型 List(self)               #表的构造操作,创建一个空表 is_empty ...

  5. lr_java user协议脚本开发

    1.准备工作,安装jdk,配置环境变量 lr11 jdk1.6 32位 lr12 jdk1.7 32位 注:若原已安装了jdk1.8,现要安装jdk1.7,若遇到安装好1.7并配置好环境后,在cmd中 ...

  6. 记一次腾讯云不能连接DNS服务器的问题排查过程

    由于腾讯云在使用过程中需要用到yum,在yum安装软件的时候报错不能连接到源的网站.当时经过排查发现域名没有解析.有可能是DNS服务器问题或者我的腾讯云DNS配置出现问题. 所以我查看了/etc/re ...

  7. java切割音频文件

    工具: 一个jar包即可:jave-1.0.2.jar 可以切割wav格式的音频文件 完整工程目录 就一个jar包,一个main类 代码: package com.zit; import java.i ...

  8. Java并发编程阅读笔记-同步容器、工具类整理

  9. 理解什么是适配器(adapter)和接口(interface)

    ● 适配器(adapter) In computing, adapter is a hardware device or software component that converts transm ...

  10. JS案例五:设置全选、全不选以及反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...