异步请求Ajax
AJAX:Asynchronous JS And XML,包括HTML、CSS、JS、DOM、XML、JSON等,客户端技术范畴。主要目标:发起异步请求/响应,实现页面内容的局部刷新,提高浏览体验;实现动态页面的静态化。
使用AJAX的步骤:
(1)创建XHR对象——XMLDOM对象
(2)绑定onreadystatechange事件监听函数
(3)创建请求消息
(4)发送请求消息
AJAX的原理图:

使用AJAX发起GET请求:
(1)
(2)
(3) xhr.open('GET', 'xx.php?k=v&k=v', true)
(4) xhr.send( null )
使用AJAX发起POST请求:
(1)
(2)
(3) xhr.open('POST', 'xx.php', true)
(3.5) xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
(4) xhr.send( 'k=v&k=v&k=v' )
|
常见的MIME(Multipurpose Internet Mail Extension): .jpeg .jpg <= image/jpeg .html .htm <= text/html .mpeg3 .mp3 <= audio/mpeg3 MIME类型,就是用于唯一的标示一种特定格式的文件的一个描述符 常见的MIME类型: image/jpeg image/gif image/png text/plain text/html text/css application/javascript application/xml application/json application/msword .... |
1.使用AJAX接收服务器返回的text响应
示例:点击酒馆,获得英雄列表
服务器端:
header('Content-Type: text/plain');
客户端:
(1)(2) console.log(xhr.responseText);
(3)(4)
2.使用AJAX接收服务器返回的html响应——重点
示例:动态数据的级联下拉列表
服务器端:
header('Content-Type', 'text/html');
客户端:
(1)(2) document.getElementXxxx().innerHTML = xhr.responseText;
(3)(4)
3.使用AJAX接收服务器返回的script响应
示例:加载不同的JS,实现页面主题的定制
服务器端:
header('Content-Type', 'application/javascript')
客户端:
(1)
(2) typeof( xhr.responseText ); //string
eval( xhr.responseText ); //把string作为js来执行
(3)
(4)
|
服务器如何异步的向客户端返回批量有结构的数据?如多个商品、多条帖子.... text/plain(无格式):'tom9070mary105john120' text/plain(有格式):'tom#90#70@mary#10#5@john#1#20' text/html(有格式): '<div><p>tom<p><p>90</p><p>70</p></div><div><p>mary<p><p>90</p><p>70</p></div>' 批量响应数据最好的形式:有数据、有格式、跟HTML标签无关系、编程语言易于处理 application/xml: application/json: |
4.使用AJAX接收服务器返回的xml响应
HTML:HyperText Markup Language,所有的HTML标签已经为了在浏览器中加以而固定下来。用标签来呈现网页内容。
XML:eXtensible Markup Language,可扩展的标签语言,用标签的形式来描述数据(财务、航天、化学、无线...),没有预定义任何的标签,所有的标签都由使用者随意指定。XML语言标准规定了XML数据的格式必须满足:
(1)双标签有开始,就必须有结束;单标记标签必须有/
(2)标签名严格区分大小写
(3)属性值必须使用引号括起来
(4)...
|
W3C DOM分为三部分: (1)核心DOM:用于处理任意的ML文档 document childNodes firstChild lastChild parentNode nextSibling previousSibling document.getElementXxxx node.getAttribute() node.setAttribute() (2)HTML DOM:用于HTML文档 (3)XML DOM:用于处理XML文档 XMLHttpRequest DOMParser - 可以把一段XML字符串解析为一棵DOM树 |

示例:异步的加载新闻列表
5.使用AJAX接收服务器返回的json响应——重点
JSON:原本是JS中创建的对象的“直接量”法,后来从JS中独立出来,作为一种字符串数据的表示法,被各种语言所支持。其作用于XML类似,但比XML更加轻量级、简洁、处理速度更快。
JSON格式表示字符串,有两种格式:
JSON对象字符串格式:'{ "k1":"v1", "k2": v2 }'
JSON数组字符串格式:'[ v1, v2, v3... ]'
示例:异步的加载新闻列表
服务器端:
header('Content-Type: application/json');
$arr = [ ];
echo json_encode( $arr ); //PHP数组=>JSON字符串
客户端:
(1)
(2) var jsObj = JSON.parse( xhr.responseText ); //把JSON字符串解析为JS数组/对象
(3)
(4)
服务器端(PHP数据) => JSON字符串 => 客户端(JS对象)


悦为(深圳)科技有限公司
乐享其志
微信:JoyVisYOJOY
微博:http://weibo.com/JoyVis
联系&投稿:service@joyvis.com
异步请求Ajax的更多相关文章
- [js开源组件开发]network异步请求ajax的扩展
network异步请求ajax的扩展 在日常的应用中,你可能直接调用$.ajax是会有些问题的,比如说用户的重复点击,比如说我只希望它成功提交一次后就不能再提交,比如说我希望有个正在提交的loadin ...
- 异步请求Ajax(取得json数据)
异步请求Ajax 没有学习Ajax之前请求数据的时候都是整个页面全部刷新了一次,也就是每次请求都会重新请求所有的资源.但是在很多时候不需要页面全部刷新,仅仅是需要页面的局部数据刷新即可,此时需要发送异 ...
- JavaScrpit中异步请求Ajax实现
在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面. 一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需 ...
- 关于异步请求AJAX的具体解释
1,异步请求的方法步骤: 1,推断当前用户支持的浏览器类型 XMLHttpRequest:推断是否支持非IE浏览器,相应的创建方法:xmlhttp = new XMLHttpRequest(); wi ...
- [异步请求]ajax、axios、fetch之间的详细区别以及优缺点
1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...
- jQuery异步请求ajax()之complete参数详解
请求完成后回调函数 (请求success 和 error之后均调用).这个回调函数得到2个参数:XMLHTTPRequest) 对象和一个描述请求状态的字符串("success", ...
- 异步请求 ajax的使用详解
https://blog.csdn.net/happyaliceyu/article/details/52381446 可以说是很详细了,赞
- 黑马学习AJAX jQuery发送异步请求 $.ajax() $.post() $.get()是在调用方法而不是定义方法
- ajax异步请求302分析
1.前言 遇到这样一种情况,打开网页两个窗口a,b(都是已经登录授权的),在a页面中退出登录,然后在b页面执行增删改查,这个时候因为授权原因,b页面后端的请求肯定出现异常(对这个异常的处理,进行内部跳 ...
随机推荐
- Win8.1无法安装.NET Framework 3.5的解决办法
这个问题纠结了我很多天,恢复系统也没用,差点儿就重装Win8,现在终于解决了,你也来试试吧! 机型:台电X89 系统:Win8.1 with bing 故障:在未安装.NET Framework 3. ...
- iOS 数据序列化,NSCoding, NSCoder
iOS可以利用NSKeyedArchiver类将对象序列化成NSData存储在磁盘上,但前提是该对象所属的类必须遵从NSCoding协议. NSCoding协议包含两个方法,要序列化的类必须实现它们 ...
- C++中extern关键字用法小结
总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...
- sqlserver 查看正在执行sql
SELECT [session_id], [request_id], [cpu_time], [start_time] AS '开始时间', [status] AS '状态', [co ...
- Acadia Lab 6 轮盘游戏机
WRTnode 肯定不是亲生的... 果断转投Acadia —.— 不是国军不给力,奈何共军有高达 为啥不转树莓派?因为选做实验肯定有很多人用树莓派做...我抢不过他们,只能挑点冷门的蹭分_(:з」 ...
- c++ oop
C ++语言的主要优势之一是与其前身语言C不同的是,它被设计为支持面向对象编程(OOP). 这是一个相当简单的概念:你将操纵不同的对象,每个对象都是一个特定类的实例. 类是一组方法(绑定到这个类的函数 ...
- nullcon HackIM 2016 -- Crypto Question 1
You are in this GAME. A critical mission, and you are surrounded by the beauties, ready to shed thei ...
- Minecraft 插件 world edit 的cs 命令
现在 jar包 http://www.mozilla.org/rhino ,放到classpath 我是放到libs目录中, 1.8 spi 服 @ECHO OFFjava -cp ".;. ...
- SQLServer2008R2 error 40解决方法
实际遇到的问题,以下为搜到的解决方案,亲测可用 转自 http://blog.csdn.net/laga516/article/details/7696577 最近一直在配置服务器, 这当中最头疼的就 ...
- Linux secure boot(安全启动)时添加Nvidia显卡驱动
开启Secure boot情况下,在Fedora 21下安装Nvidia 显卡驱动的方法. Nvidia显卡驱动可以从官网上下载最新版>> 点击进入 下载后添加可执行权限: #chmod ...