Ajax的初步认识
1.背景
2005年,JJG发表了一篇在线文章,介绍了AJAX(Asynchronous Javascript + XML),这项技术能够向服务器请求额外数据而无须卸载页面,说是改变了以前的“单击”,“等待”的交互模式。事实上,在JJG提出的这项技术,已经存在了很长一段时间,AJAX以前就叫远程脚本,功能也是能实现浏览器与服务器之间的远程通信,重命名为AJAX,在2005年底开始红极一时。
2.核心
Ajax的核心,XMLHttpRequest对象(简称XHR),微软第一个引入此特性(IE5),它作用是:
1)为服务器发送请求解析服务器响应提供流畅的接口
2)以异步的方式向服务器取得更多信息(无须刷新界面,得到数据后,通过DOM将数据插入页面)
3.XHR的用法
收到服务器响应数据之后,响应的数据会自动填充到XHR对象的属性当中,XHR对象的属性值如下:
responseText:作为响应主题被返回的文本
responseXML:如果想要内容为.XML文件,就会保存到XML DOM 文档当中,不为XML数据,则此字段为null
status:响应的HTTP状态(HTTP状态代码为200作为成功的标志;304表示请求的资源并没有修改,所以可以直接在缓存中可读取,这两种状态如果其中一个存在,responseText都能被访问到)
statusText:HTTP状态说明
3.1 XHR对象的创建
IE7+、Firefox、Opear、Chrome和Safari都支持原生的XHR对象,所以直接运用XHR对象的构造函数就能构造出xhr对象
var xhr = new XHRHttpRequest();
3.2 XHR对象的使用
1)同步状态下
// false代表取消异步,即现在为同步
// 调用open方法并不会真正发送请求,而是启动一个请求以备发送!!!!
xhr.open("get", "example.txt", false);
// send接受一个参数,即作为请求主体发送的数据,如果没有,就必须输入null
xhr.send(null);
// 得到服务器响应之后,http状态码status,不同浏览器各有差别,但是普遍认为【200,300)区间内,为请求成功
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
console.log(xhr.responseText);
} else {
console.log("请求不成功:" + xhr.status);
}
2)异步状态下
即把open的第三个参数由false改为true,为什么异步,因为此时可以检测到XHR对象的readState属性
readState:可检测请求~响应的各个阶段
0:未初始化
1:启动
2:发送
3:接收
4:完成 (我们一般只对4感兴趣,检测4就OK)
怎么检测readState?可以使用readystatechange事件,因为radState每一次改变,都会触发该事件。值得注意的是,必须在调用open()之前调用onreadystatechange事件才能确保跨浏览器兼容性。
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readState === 4){
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
console.log(xhr.responseText);
} else {
console.log("请求不成功:" + xhr.status);
}
}
}
xhr.open("get", "example.txt", true);
xhr.send(null);
3)get方法使用技巧
xhr.open("get", "url", true);
通常此url都会伴随参数,并且经常因为这些查询字符串的格式问题而保持,所以添加参数的时候要用到encodeURLComponent(string)来进行编码
为了不使用那种直接手动在url添加?&这种很繁琐的步骤,我们可以封装一个好玩的函数,如下
function addURLParam(url, name, value) {
url += (url.indexOf("?") === -1 ? "?" : "&");
url += encodeURLComponent(name) + "=" + encodeURLComponent(value) ;
}
//下面就构建一个url,超级方便
var url = "example.php";
// 添加参数
url = addUrlParam(url, "name", "Psg");
url = addUrlParam(url, "age", 23);
// 初始化请求
xhr.open("get", url, true)
ps:
encodeURLComponent的作用?
作用:文本字符串编码为一个有效的统一资源标识符 (URL)
假如我不用它来编码字符串,很有可能发发生下面的事情:
var username = "psg&age=23";
var url = "http://www.baidu.com?username=" + username; console.log(url) // 输出 http://www.baidu.com?username=psg&age=23
看到没有,莫名奇妙变成了两个参数了。使用了encodeURLComponent就不会出现这种情况。
Ajax的初步认识的更多相关文章
- 状态保持以及AJAX的初步学习
嘿嘿,今天学习的有点迷茫哦,主要学习把验证码使用在登录页面时间的一些逻辑,学习这个时间并没有那么的迷惑哦,可是自己写程序时间倒是有点反应迟钝,不过还好总是在最后搞清楚啦,另外就是一步一步的学习是接近项 ...
- 毕业设计《项目管理》总结06之ajax的初步使用经验
1.ajax页面时不能实现下载功能,因为后台下载功能返回的是一个流,而ajax得到后台的数据只能是字符串或字符,所以实现的方法可以: 例如:用js生成一个form,用这个form提交参数,并返回“流” ...
- 转:ASP.NET 使用Ajax
之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的Sc ...
- ASP.NET 使用Ajax(转)
之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的Sc ...
- 使用Ajax
ASP.NET 使用Ajax 之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便 ...
- 对学习Ajax的知识总结
1.对Ajax的初步认识 1.1. Ajax 是一种网页开发技术,(Asynchronous Javascript + XML)异步 JavaScript 和 XML: 1.2.Ajax 是异步交互, ...
- JQuery中的Ajax(六)
一:Ajax请求jQuery.ajax(options) load(url,[data],[callback])jQuery.get(url,[data],[callback]) jQuery.get ...
- 用jsonp实现搜索框功能
用jsonp实现搜索框功能 前面的话: 在上周本来想发一篇模仿必应搜索的界面.但是在准备写文章之前突然想到前面学习了ajax技术,在这里我也让我的页面有一种不需要手动刷新就能获取到数据.但是发现用前面 ...
- (十三)JSON的使用(下)
(接上一章节) 4.2 使用ajax交互方式 使用ajax的转换思想 A:异步请求在页面中发起,也要在页面中接收数据并展现. B:ajax中的数据不能从作用域中获取,只能从respons ...
随机推荐
- apt-get update 出现错误“ AppStream cache update completed, but some metadata was ignored due to errors. ”
只需要 执行 sudo rm /var/lib/dpkg/lock; 之后再次执行:sudo apt-get update
- 1021. Deepest Root DFS 求最长无环路径
第一次出现超时 ac不了的题 思路一:对于每个节点用一次dfs dfs中 记录到当前的最长路径,若大于最长,则清除set,并加入当前节点 思路二:先查找只有一个相邻节点的节点进行dfs,由于可能存在闭 ...
- 学以致用三十一-----IPAddressField has been removed
python 和 django版本 在进行makemigrations的时候报错 设置的字段 class Servers(models.Model): '''服务器信息''' hostname = m ...
- 华为云服务器为Tomcat配置SSL
近期由于开发小程序需要在云服务器上配置https访问协议,也遇到了一点小问题,把配置过程记录一下:SSL 证书申请下来之后会有 .jks .crt .pfx .pem为后缀的文件(如何申请SSL证书这 ...
- latex_引用参考文献格式,引用多篇参考文献
以下内容在TeXstudio中实现: LaTeX 标准选项及其样式命令为: \bibliographystyle{type} 共有以下8种: plain,按字母的顺序排列,比较次序为作者.年度和标题. ...
- WordPress自动裁剪768w像素缩略图的解决办法
最新观赏鱼在折腾一个新的WordPress站点,即使通过后台把多媒体裁剪的宽高都设置为0时,移除主题可能存在的自动裁剪大小,WordPress依然会在上传图片的时候自动裁剪一个宽为768像素的图片.并 ...
- eclipse 带sts插件
https://pan.baidu.com/s/1c1M11ss 密码:ucjl
- python的基本数据类型(一)
一.运算符逻辑运算and:两边都真则真or:有真则真not:非假是真 顺序:()>==>not==>and>=or 二.while.. elsewhile 条件: 代码块els ...
- 录音--获取语音流(pyAudio)
这是学习时的笔记,包含相关资料链接,有的当时没有细看,记录下来在需要的时候回顾. 有些较混乱的部分,后续会再更新. 欢迎感兴趣的小伙伴一起讨论,跪求大神指点~ 录音-语音流(pyAudio) tags ...
- 前端开发掌握nginx常用功能之server&location匹配规则
nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...