add by zhj: 用ajax发送json数据时注意两点,
第一,使用JSON.stringify()函数将data转为json格式的字符串,如下
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"
(注:$.ajax中的参数dataType相当于accept header)
0.前言
    本文解释如何使用Jquery中的ajax方法传递JSON数据包,传递的方法使用POST(当然PUT又有时也是一个不错的选择)。POST JSON数据包相比标准的POST格式可读性更好些,层次结构也更清晰。
    为了说明问题,前端和后端较为简单,重点突出AJAX的应用。
 
    【前端】——add-post-json.html
图1 add页面

【后端】——add-post-json.php

  1. <?php
  2. // 返回JSON格式
  3. header('Content-Type:application/json;charset=utf-8');
  4. $result = array();
  5. // 获得原始输入内容
  6. $json = file_get_contents("php://input");
  7. //var_dump($input_str);
  8. // JSON转换为PHP对象
  9. $obj = json_decode($json);
  10. $a = $obj->a; // var_dump($a);
  11. $b = $obj->b; // var_dump($b);
  12. $result["result"] = $a + $b;
  13. echo json_encode($result, JSON_NUMERIC_CHECK);
  14. ?>
 
    【代码仓库】——test-jquery-ajax

代码仓库位于bitbucket使用Hg(而不是Git),Hg在windows或ubuntu上均有很好用的GUI工具——TortoiseHg,本人愚笨没能熟练掌握Git。

    【TortoiseHg使用说明】——如果没有使用过Hg请参考博文hg clone部分操作即可。   
    【JQuery 中文API
    【相关博文】
 
1.POST JSON数据包
  1. var submit_sync = function() {
  2. $.ajax({
  3. type: "post",
  4. url: 'add-post-json.php',
  5. async: false, // 使用同步方式
  6. // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...
  7. // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}
  8. data: JSON.stringify({
  9. a: parseInt($('input[name="a"]').val()),
  10. b: parseInt($('input[name="b"]').val()),
  11. now: new Date().getTime() // 注意不要在此行增加逗号
  12. }),
  13. contentType: "application/json; charset=utf-8",
  14. dataType: "json",
  15. success: function(data) {
  16. $('#result').text(data.result);
  17. } // 注意不要在此行增加逗号
  18. });
  19. }
 
【HTTP请求部分内容】
POST /test-jquery-ajax/add-post-json.php HTTP/1.1 
Host: 192.168.1.104 
Connection: keep-alive 
Content-Length: 35 
Accept: application/json, text/javascript, */*; q=0.01 
X-Requested-With: XMLHttpRequest 
Content-Type: application/json; charset=UTF-8 
 
{"a":12,"b":34,"now":1403525674676}
 
【HTTP响应部分内容】
HTTP/1.1 200 OK
Content-Length: 13
Content-Type: application/json;charset=utf-8
 
{"result":46}
 
2.重要说明
【1】
需要使用JSON.stringify,它将js的数据类型转为json格式的字符串: '{"a":12,"b":34,"now":1403525674676}'
如果不用JSON.stringify,那POST消息体是普通的字符串: 'a=12&b=34&now=1403525674676'
以下写法并不能达到POST JSON数据包的效果,这是标准的POST格式。
  1. data: {
  2. a: parseInt($('input[name="a"]').val()),
  3. b: parseInt($('input[name="b"]').val()),
  4. now: new Date().getTime() // 注意不要在此行增加逗号
  5. },
【HTTP请求部分内容】
POST /test-jquery-ajax/add-post-json.php HTTP/1.1 
Host: 192.168.1.104 
Content-Length: 27 
X-Requested-With: XMLHttpRequest 
Content-Type: application/json; charset=UTF-8

a=12&b=34&now=1403525989275

 
【2】
需要强制类型转换parseInt(),否则HTTP请求为 {"a":"12","b":"34"}
以下代码并不能达到预期效果
  1. data: JSON.stringify({
  2. a: $('input[name="a"]').val(),
  3. b: $('input[name="b"]').val(),
  4. now: new Date().getTime() // 注意不要在此行增加逗号
  5. }),
【HTTP请求部分内容】
POST /test-jquery-ajax/add-post-json.php HTTP/1.1 
Host: 192.168.1.104 
Content-Length: 39 
X-Requested-With: XMLHttpRequest 
Content-Type: application/json; charset=UTF-8

{"a":"12","b":"34","now":1403526427890}

 
【3】
IE8兼容,IE7和IE6不支持JSON.stringify,使用请慎重。
 

使用Ajax方式POST JSON数据包(转)的更多相关文章

  1. 前端学习——使用Ajax方式POST JSON数据包

    0.前言     本文解释怎样使用Jquery中的ajax方法传递JSON数据包,传递的方法使用POST(当然PUT又有时也是一个不错的选择).POST JSON数据包相比标准的POST格式可读性更好 ...

  2. django 使用Ajax方式POST JSON数据包

    示例1: js: function SaveAction(){ //点击 保存按键 var senddata = {"type":"A", "host ...

  3. 前端ajax用post方式提交json数据给后端时,网络报错 415

    项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource ...

  4. AJAX如何接收JSON数据

    简介 在我们了解如何使用AJAX返回JSON数据的时候要先明白下列几点 1. JSON如何来表示对象的 2. JSON如何来表示数组的 var object = { "labId" ...

  5. J2EE Web开发入门—通过action是以传统方式返回JSON数据

    关键字:maven.m2eclipse.JSON.Struts2.Log4j2.tomcat.jdk7.Config Browser Plugin Created by Bob 20131031 l ...

  6. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  7. c# 生成json数据包

    json数据类型,归根到底就是一个字符串,管他里面什么格式,它就是一个字符串来的! 看一个json数据包: { "touser":"OPENID", " ...

  8. jquery通过ajax方法获取json数据不执行success回调

    问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...

  9. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

随机推荐

  1. c# 16进制byte转成int

    ]; Ratedata=System.BitConverter.GetBytes(FreResultTBoxValue); 上面这个 FreResultTBoxValue 变量是int,系统中自带in ...

  2. solr的基本使用

    Solr 概念: 1. 搜索引擎的技术,建立在Lucene之上,可以解决跨平台,跨语言的问题.(Lucene本身是个jar包,也就是API,不能独立运行,需要程序的调用来完成全局检索,不具备跨平台,跨 ...

  3. 解题:SPOJ 422 Transposing is Even More Fun

    题面 这种换来换去的东西很容易想到置换群那一套,然后题目甚至还暗示了二进制=.= 直接换的话显然是$2^{a+b}$次,但是一个循环节里可以少换一次,然后问题就变成了数循环节 在一个循环节里的位置有什 ...

  4. unity常用小知识点

    感觉自己抑郁变得更严重了,超级敏感,经常想崩溃大哭,睡眠超差,实在不想药物治疗,多看看书,多约约朋友,多出去走走. 来几句鸡汤吧,人一定要活得明白一点,任何关系都不要不清不楚,说不定最后受伤的就是自个 ...

  5. Java基础-SSM之mybatis的树形控件(自关联)

    Java基础-SSM之mybatis的树形控件(自关联) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建areas表: use y ...

  6. Linux使用imagemagick的convert命令压缩图片、节省服务器空间

    一.安装: sudo apt-get install imagemagick 二.说明 imagemagick的命令convert可以完成此任务,其参数-resize用来改变图片尺寸,可以直接指定像素 ...

  7. [转] Android 性能分析案例

    Android 系统的一个工程师(Romain Guy)针对Falcon Pro  应用,撰写了一个Android性能分析的文章.该文章介绍了如何分析一个应用哪里出现了性能瓶颈,导致该应用使用起来不流 ...

  8. struts的理解

    1.struts是一个按MVC模式设计的Web层框架,其实他就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类.我们可以在web.xm ...

  9. webpack react 错误整理

    1.ERROR in ./src/entry.js Module build failed: SyntaxError 解决方法: 安装babel-preset-react,  npm install ...

  10. 工具类。父类(Pom文件)

    ego_parent(pom文件) <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...