Ajax与json在前后端中的细节解惑
ajax请求JSON
Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏域,告诉后台属于ajax方式提交,默认的隐藏 域名称是ajax(可以通过VAR_AJAX_SUBMIT配置),如果是JQUERY类库的话,则无需添加任何隐藏域即可自动判断。”
我还没细看它的源代码,搜到的出处在这里
define('IS_AJAX', (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
|| !empty($_POST[C('VAR_AJAX_SUBMIT')])
|| !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
很明显下面的对POST和GET的验证就是对应上面说的自己写的ajax的提交隐藏域的验证。那么也就是说上面的$_SERVER['HTTP_X_REQUESTED_WITH'] 的判断就是对 Jquery 的ajax提交的判断了,然后用Firebug查看一个ajax请求,可以看到如图

看到请求头信息中的最后一行,有一个 X-Requested-With,值为 XMLHttpRequest。这个就是jQuery的ajax方法中生成的,当然我们自己写的ajax提交方法也可以这样写,详情可以看这篇文章。我这里点到为止,了解了原理即可。
ajax返回JSON格式服务端
原始写法
$data = array('code'=>'0', 'msg'=>'修改成功');
echo json_encode( $data );
这样写前端得到的结果是一个JSON字符串,需要通过 JSON.parse() 方法才能转成JSON对象使用,注意不要使用eval()这个方法。另外IE低版本可能不原生支持JSON,要引用json2.js函数库。
框架写法
有的框架提供了封装好的ajax json格式返回方法,比如Thinkphp提供了 ajaxReturn($data) 。这个方法得到的结果是一个JSON对象,不需要转换,JS就可以直接使用。
改进原始写法
为什么框架中的方法返回的可以是一个JSON对象呢?这就关系到HTTP Header的知识了。Header状态类型有404,200,403等;Header内容类型有html,图片,视频等等。而JSON对象在Header里的设置是内容类型为JSON,PHP中设置Header的方法非常简单。在echo 前加上 header('Content-type:text/json'); 即可。
$data = array('code'=>'0', 'msg'=>'修改成功');
header('Content-type:text/json');
echo json_encode( $data );
相似的,在使用GD库生成图片(如验证码)时,也需要使用header函数设置类型为图像,如 header("Content-type: image/png;");
ajax返回JSON格式浏览器端
$.get(); 和 $.post(); 得到的是服务端返回的原始数据,比如服务端返回的是字符串则是字符串,返回的是JSON对象就是JSON对象;
$.getJSON(); 得到的是JSON对象或者报错,无论服务端返回的是字符串还是JSON对象。如果服务端返回的数据不符合JSON规格则会报错;
Ajax与json在前后端中的细节解惑的更多相关文章
- ajax学习----json,前后端交互,ajax
json <script> var obj = {"name": "xiaopo","age": 18,"gender ...
- ajax将json写到table中去
查询条件: <table style="width: 100%;border-collapse: collapse;" > <tr> <th styl ...
- SSM框架用JSON进行前后端数据传输
一个根据用户id查找用户信息的简单功能,使用JSON进行数据的传输 前端代码 这里用bootstrap做简单的样式美化,中间留了个div用来异步的显示查询结果,ajax进行前端的数据传输(class内 ...
- ajax提交json数据到后端C#解析
本文链接:https://blog.csdn.net/qq_22103321/article/details/78015920 前端提交json数据 $.ajax({ type: "post ...
- SpringMvc采用 http+json 实现前后端交互
演示列表 报文表示 一.Json请求和Json响应 实现:Spring4.1.1.RELEASE + jackson2.4.4+JQuery1.10.2 1.pom.xml <propertie ...
- C# web Api ajax发送json对象到action中
直接上代码: 1.Product实体
- 前后端交互实现(nginx,json,以及datatable的问题相关)
1.同源问题解决 首先,在同一个域下搭建网络域名访问,需要nginx软件,下载之后修改部分配置 然后再终端下cmd nginx.exe命令,或者打开nginx.exe文件,会运行nginx一闪而过, ...
- JSON(及其在ajax前后端交互的过程)小识
一. json介绍 json是一种轻量级的数据交换格式,规则很简单: 并列的数据之间用逗号(,)分隔: 映射用冒号(:)表示: 并列数据的集合(数组)用方括号([])表示: 映射的集合(对象)用大括号 ...
- SSM-网站后台管理系统制作(4)---Ajax前后端交互
前提:Ajax本身就为前后端交互服务的,实现功能:用户输入信息,实时判断用户的情况,这也是现在登录界面普遍流行的做法.前端js通过注释识别Controller层,该层查询返回,和之前Google验证码 ...
随机推荐
- 【转发】NPAPI开发详解,Windows版
NPAPI开发详解,Windows版 9 jiaofeng601, +479 9人支持,来自Meteor.猪爪.hanyuxinting更多 .是非黑白 .Yuan Xulei.hyolin.Andy ...
- Linux hostname对Oracle实例以及监听的影响
在Linux平台中,对hostname的修改,是否对ORACLE数据库实例或监听进程有影响呢?如果有影响,又要如何解决问题呢?另外/etc/hosts下相关内容的修改,是否也会影响实例或监听呢?这里涉 ...
- SQL Server:字符串函数
以下所有例子均Studnet表为例: 1. len():计算字符串长度 len()用来计算字符串的长度,每个中文汉字或英文字母都为一个长度 select sname, len(sname) from ...
- mysql自动备份维护shell脚本 (copy)
#!/bin/bash #Mysql 自动备份 压缩并上传到 指定ftp #设想每天凌晨3点备份mysql #编辑crontab配置文件 # * * * backupmysql.sh #压缩并以&qu ...
- 设计模式C#实现(十)——桥接模式
意图 0 适用性 1 结构 2 实现 3 效果 4 意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 适用性 1.不希望抽象和实现间有固定的绑定关系2.类的抽象以及它的实现都可以通过生成子 ...
- html页面高亮关键词
function hightLightTheKeyWord(searchParam,$dom){ if(searchParam&&!/^\s*$/.test(searchParam)) ...
- 如何在开机时让Tomcat以进程的方式启动
一. 安装tomcat服务 1. 打开cmd命令窗口,进入到"tomcat安装路径/bin"目录下,运行"service.bat install"命令,安装to ...
- linux线程同步(4)-自旋锁
自旋锁与互斥量功能一样,唯一一点不同的就是互斥量阻塞后休眠让出cpu,而自旋锁阻塞后不会让出cpu,会一直忙等待,直到得到锁!!! 自旋锁在用户态使用的比较少,在内核使用的比较多!自旋锁的使用场景:锁 ...
- 还是不想改报告,伊阿忆啊哟-Linux基础继续
hi 虽然今天是最最美好的周六(前不着工作日后不着工作日),但老子还要来改报告,但额就是不想改,你拿我有啥办法啊... 争取完结Linux基础 一.Linux常用命令(三) 4.帮助命令 4.1 帮助 ...
- 北理工c语言期末考试
1 给定一个区间,输出其中前半部分数字之和等于后半部分数字之和的数,没有则输出No output.(15分) 题目内容: 给定一个区间,输出其中前半部分数字之和等于后半部分数字之和的数,没有则输出No ...