0.前言
    本文解释怎样使用Jquery中的ajax方法传递JSON数据包,传递的方法使用POST(当然PUT又有时也是一个不错的选择)。POST JSON数据包相比标准的POST格式可读性更好些,层次结构也更清晰。
    为了说明问题,前端和后端较为简单,重点突出AJAX的应用。
    【前端】——add-post-json.html

图1 add页面

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

<?php
// 返回JSON格式
header('Content-Type:application/json;charset=utf-8');
$result = array(); // 获得原始输入内容
$json = file_get_contents("php://input");
//var_dump($input_str); // JSON转换为PHP对象
$obj = json_decode($json); $a = $obj->a; // var_dump($a);
$b = $obj->b; // var_dump($b); $result["result"] = $a + $b;
echo json_encode($result, JSON_NUMERIC_CHECK);
?>

    【代码仓库】——test-jquery-ajax

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

    【TortoiseHg使用说明】——假设没有使用过Hg请參考博文hg clone部分操作就可以。   
    【JQuery 中文API
    【相关博文】

1.POST JSON数据包
    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);
} // 注意不要在此行添加逗号
});
}

【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 否则HTTP请求为a=12&b=34。
下面写法并不能达到POST JSON数据包的效果,这是标准的POST格式。
data: {
a: parseInt($('input[name="a"]').val()),
b: parseInt($('input[name="b"]').val()),
now: new Date().getTime() // 注意不要在此行添加逗号
},
【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"}
下面代码并不能达到预期效果
data: JSON.stringify({
a: $('input[name="a"]').val(),
b: $('input[name="b"]').val(),
now: new Date().getTime() // 注意不要在此行添加逗号
}),
【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数据包(转)

    add by zhj: 用ajax发送json数据时注意两点, 第一,使用JSON.stringify()函数将data转为json格式的字符串,如下 data: JSON.stringify({   ...

  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. 前端学习——JQuery Ajax使用经验

    0.前言     在项目推进过程中常常使用Ajax,通过Jquery提供的函数能够很方便的使用Ajax,可是在实际使用中也遇到一些问题,比如怎样防止浏览器使用缓存,怎样使用同步方式等.通过博文整理总结 ...

  6. 使用@RequestBody注解获取Ajax提交的json数据

    最近在学习有关springMVC的知识,今天学习如何使用@RequestBody注解来获取Ajax提交的json数据内容. Ajax部分代码如下: 1 $(function(){ 2 $(" ...

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

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

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

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

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

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

随机推荐

  1. C++ POST方式访问网页

    bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &s ...

  2. [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决

    1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName>  或者/data/data/<pakeageName>找到插 ...

  3. java EE技术体系——CLF平台API开发注意事项(1)——后端开发

    前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...

  4. poj3311Hie with the Pie

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7599   Accepted: 4088 ...

  5. Python基础教程总结(一)

    引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...

  6. 定时任务管理之python篇celery使用

    一.为什么要用celery celery是一个简单.灵活.可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具.他是一个专注于实时处理的任务队列,同时也支持任务调度. celery是异 ...

  7. Windows server 2008 R2 + IIS7.5,ASP网站设置

    Windows server 2008 R2 + IIS7.5,ASP网站设置 1. 让IIS7支持ASP Win2008 IIS7 默认不安装ASP,如果需要ASP 的支持,需要将这个角色服务选上. ...

  8. javascript script load related【转】

    先来看这行代码: <script src = "allMyClientSideCode.js"></script> 这有点儿……不怎么样.“这该放在哪儿?” ...

  9. 驱动13.i2c设备驱动程序

    1 分析i2c设备的识别过程i2c_add_driver    i2c_register_driver        driver->driver.bus = &i2c_bus_type ...

  10. js-图片img转base64格式

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