刚开始结束Ajax请求的时候,那真的是迷迷糊糊,昏天暗地,通过学习的深入和翻阅各种资料、求助度娘,总结一下Ajax请求,与大家分享一下,希望能给学习Ajax的同学一些帮助,废话不多手,直接开始~~~

一、Ajax请求的原理

1.原理:在Ajax请求中,html页面的中操作将通过Ajax引擎与服务器端进行通讯,然后将返回的结果提交到客户端页面的Ajax引擎,再由Ajax引擎来决定将服务器端返回数据插入到页面的指定位置。从而实现无需刷新页面的http请求。 看图:

2.Ajax请求的优点

 a.当然最大的优点就是,无需刷新就可更新页面
b.可以把原先服务器端负担的工作的转移客户端,利用客户端的闲置资源进行处理,减轻服务器和带宽的负担,节约空间和成本
c.Ajax没有平台限制。Ajax把服务器由原先的传送内容转变为传输数据,而数据格式可以为纯文本和XML格式,这两种格式没有平台限制。
d.可以调用Xml等外部数据,进一步促进页面的显示和数据的分离

3.Ajax使用的技术

 a.XMLHttpRequest对象
b.XML
c.JavaScript
d.Css
e.DOM

4.Ajax请求时性能的优化

 a.尽量使用局部变量,不要使用全局变量
b.优化for循环
c.尽量少使用eval,每次使用eval都会浪费大量时间
d.将DOM节点附加到文档上
e.尽量减少使用点“.”号操作符的使用

二、不同方式的Ajax请求

1.原生js的ajax请求

  a.初始化XMLHttpRequest对象

    /* IE6以上的浏览器*/

    var http_request = new ActiveXObject("Msxml2.XMLHTTP") 或者: var http_request = new ActiveXObject("Microsoft.XMLHTTP")

    /* 非IE浏览器(firefox,Opera,Mozilla,Safari)*/
var http_request = new XMLHttpRequest() 考虑到浏览器的兼容性,需要创建一个跨浏览器的XMLHttpRequest对象,如下:
        var http_request;
if (window.XMLHttpRequest) { //兼容非IE浏览器
http_request = new XMLHttpRequest()
} else if (window.ActiveXObject) { //兼容IE6以上的浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {}
}
}
  b.XMLHttpRequest对象的常用方法

     ----创建新请求的方法
open()方法用于设置进行异步请求目标的URL,请求方法以及其他参数信息
open("methods","URL","asyncFlag")
methods:用于请求的指定类型,一般为POST或者GET
URL:用于指定的请求地址,可以用绝对地址和相对地址,并且可以传递查询字符串
asyncFlag:可选参数,用于指定请求方式,异步请求为true,同步请求为false,默认为true ----向服务器发送请求的方法
send()方法用于向服务器发送请求。如果请求声明为异步,该方法立即返回,否则将会等到接收到响应为止
send(content)
content:用于指定发送的数据,可以是DOM对象的实例,字符串等,如果没用参数,需要传递设置为null
举个例子:
需要向服务器发送一个没有参数的请求,如下:
http_request.send(null) ----设置请求的HTTP头的方法
setRequestHeader("header","value")
header:用于指定的HTTP头
value:用于指定的HTTP头的设置值
注意:setRequestHeader()方法调用需要在open()方法之后
例如:
http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded") ----停止、放弃当前异步请求的方法
abort()
例子:停止当前的异步请求http_request.abort() c.XMLHttpRequest对象的常用属性 1.onreadystatechange:用于指定状态改变时所触发的事件处理器属性,在Ajax中,每个状态改变时都会触发
这个事件处理器,通常会调用一个Javascript函数
http_request.onreadystatechange = function(){} 2.readystate:请求状态的属性
readystate属性的属性值的意义:
0:未初始化 1:正在加载 2:已加载 3:交互中 4:完成
在实际应用中,该属性的经常用于判断请求状态,当请求状态为4时,在判断请求是否成功,如果成功,就开始处理返回结果 3.responseText:获取服务器的字符串响应的属性
接收响应:var text = http_request.responseText 4.responseXML:获取服务器的XML响应的属性
接收响应:var xmldoc = http_request.responseXML 5.status:返回服务器的HTTP状态码的属性
格式:http_request.status
状态码:
100:继续发送请求 200:请求成功
202:请求被接受,但尚未成功 400:错误的请求
404:文件未找到 408:请求超时
500:内部服务器错误 501:服务器不支持当前请求所需要的某个功能 注意:status属性只能在send()方法返回成功时,才能调用
当请求完成之后:
                    if (http_request.readystate === 4) {
if (http_request.status === 200) {
alert("请求成功")
} else {
alert("请求失败")
}
}

Ajax请求汇总(一)的更多相关文章

  1. 一步步学习javascript基础篇(9):ajax请求的回退

    需求1: ajax异步请求 url标识请求参数(也就是说复制url在新页面打开也会是ajax后的效果) ajax异步请求没问题,问题一般出在刷新url后请求的数据没了,这就是因为url没有记录参数.如 ...

  2. 配置Chrome支持本地(file协议)的AJAX请求

    什么问题 WEB开发过程中,很多时候我们都是写一些简单的Demo,并不是开发一个完整项目,此时我们常见的操作是: 新建文件夹 新建需要的文件 在Sublime(或其他编辑器)中完成DEMO的编码 双击 ...

  3. JQuery使用deferreds串行多个ajax请求

    使用JQuery对多个ajax请求串行执行. HTML代码: <a href="#">Click me!</a> <div></div&g ...

  4. ajax请求成功后打开新开窗口(window.open())被拦截的解决方法

    问题:今天在做项目时需要在ajax请求成功后打开一个新的窗口,此时遇到浏览拦截了新窗口的问题,尝试在ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('clic ...

  5. 关于ajax请求,在参数中添加时间戳的必要性

    之前做项目的时候,看到别人的前端ajax请求代码中,都会带有一个时间戳类型的参数,当时随便查了一下,是为了防止浏览器缓存的原因,所以也没有进行深究,每次写的时候也习惯性的带一个,最近新项目中,我发现好 ...

  6. SpringMVC下Ajax请求的方法,@Responsebody如果返回的是布尔值,ajax不会接到任何回传数据

    SpringMVC框架下,如果用ajax向后台请求得方法如果使用@Responsebody返回布尔值的话,ajax得不到任何的回传数据. 但是如果返回String类型,就是正常的. 测试了下代码写得没 ...

  7. 【学习篇:他山之石,把玉攻】Ajax请求安全性讨论

    在开发过程中怎样考虑ajax安全及防止ajax请求攻击的问题. 先上两段网摘: Ajax安全防范的方法: 判断request的来源地址.这样的方式不推荐,因为黑客可以更改http包头,从而绕过检测. ...

  8. jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval("("+data+")"); 报错)

    $.ajax({    contentType: "application/x-www-form-urlencoded;charset=UTF-8" ,    type: &quo ...

  9. 利用闭包实现多次ajax请求只执行最后一次

    点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能 ...

随机推荐

  1. 倒排索引的AND操作

    这是一道来自百度的面试题.倒排索引的AND操作. 倒排索引是以关键词作为索引项来索引文档的一种机制,如图中Brutus.Calpurnia.Caesar为关键词,2.4.8等等为文档ID. 现在有一个 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理小记及个人吐槽

    日常啰嗦 这两天也一直在纠结这一篇文章该写什么东西,前面临时加的两篇文章就有些打乱了整体节奏,这一篇又想去写一下代码层面优化的事情,可是也不太能抓住重要的点,不太确定从何入手,因为这件事情牵涉了太多技 ...

  3. 手把手视频:万能开源Hawk抓取动态网站

    Hawk是沙漠之鹰历时五年开发的开源免费网页抓取工具(爬虫),无需编程,全部可视化. 自从上次发布Hawk 2.0过了小半年,可是还是有不少朋友通过邮件或者微信的方式询问如何使用.看文档还是不如视频教 ...

  4. openMP编程(上篇)之指令和锁

    openMP简介 openMP是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的. 当计算机升级到多核时,程序中创建的线程数量需要随CPU核数变化,如在CPU核数超过线程数 ...

  5. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  6. seajs加载jquery提示$ is not a function

    jquery1.7以上的都支持模块化加载,只是jquery默认的是支持amd,不支持cmd.所以要用seajs加载jquery,需要稍微改下jquery 把 if (typeof define === ...

  7. Android事件分发机制详解

    事件分发机制详解 一.基础知识介绍 1.经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP等 2 ...

  8. 容器 What, Why, How - 每天5分钟玩转容器技术(6)

    学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What.Why 和 How 这三个问题. What - 什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...

  9. NodeJs REPL交互式解析器常用命令

    REPL 命令 ctrl + c - 退出当前终端. ctrl + c 按下两次 - 退出 Node REPL. ctrl + d - 退出 Node REPL. 向上/向下 键 - 查看输入的历史命 ...

  10. 简单的jquery左侧导航栏和页面选中效果

    这里是要实现导航的左侧并选中的,此功能需引用jquery 效果: 左侧导航 <div class="box"> <ul class="menu" ...