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. PHP杂技(一)

    逻辑运算符 &&和& ||和|的部分区别 返回结果类型不同, A||B 如果A为真那么B不会做判断,而A|B前后都做判断 switch判断中并不是===,更像是==,例如(1) ...

  2. HDU——1405The Last Practice(试手map)

    The Last Practice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. 如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档

    ONLYOFFICE Document Server提供文档协作的服务功能,支持Word,Excel和PowerPoint的协作.但是这里告诉我们,需要进行文档管理和存储的二次开发. Please n ...

  4. 学习 JSP:第一步Eclipse+Tomcat+jre(配置环境)

    [下载软件](例子version:版本号) Eclipse从官网下载(version:4.7)http://www.eclipse.org/downloads/ jre从官网下载(version:1. ...

  5. js使用笔记

    js使用技巧总结 1,onclick有效是结合alter弹出框 <!DOCTYPE html> <html> <head lang="en"> ...

  6. 关于oracle 11g导出的dmp文件无法导入10g的问题

    今天遇到一个问题,由于无法远程11g是数据库服务器,只能用exp命令导出了一张表的dmp文件:在本地导入时遇到如下错误: IMP-00010: 不是有效的导出文件, 头部验证失败IMP-00000: ...

  7. hdu 2999 sg函数(简单博弈)

    Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/ ...

  8. “百度杯”CTF比赛 十月场_Login

    题目在i春秋ctf大本营 打开页面是两个登录框,首先判断是不是注入 尝试了各种语句后,发现登录界面似乎并不存在注入 查看网页源代码,给出了一个账号 用帐密登陆后,跳转到到member.php网页,网页 ...

  9. CodeForces 380.C Sereja and Brackets

    题意 一串括号序列,只由(和)组成,然后是m个提问,提问l和r区间内,最大的匹配匹配括号数. 思路 第一,贪心的思想,用最正常的方式去尽量匹配,详细点说就是,先找到所有的(),然后删除这些(),再找所 ...

  10. AC日记——货车运输 codevs

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...