Ajax总结

Ajax的核心技术是XMLHttpRequest对象,它可以在不向服务器提交整个页面的情况下,实现局部更新网页。通过这个对象,Ajax可以像桌面应用程序那样只与服务器进行数据层的交换,而不必每次都刷新界面,也不必每次将数据处理的工作都交给服务器来做。这样既减轻了服务器负担又提高了响应速度,还缩短了用户的等待时间。通常一个Ajax的实现过程有五步,下面我们以上篇博客中的小实例为例来逐步学习。

1.建立XMLHttpRequest对象。

IE浏览器将XMLHttpRequest实现为一个ActiveX对象,其他浏览器如Firefox,Opera,Netscape等将其实现为一个本地javascript对象,IE7.0及以上版本这两种创建方式都支持

 //定义用户存储XMLHttpRequest对象的变量var xmlHttp = null;//创建XMLHttpRequest对象function creatXMLHTTP(){//判断浏览器是否支持ActiveX控件,针对IE6及之前版本if (window.ActiveXObject){//将所有可能出现的ActiveXObject版本都放在一个数组中var arrXmlHttpTypes = ['Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];//通过循环创建XMLHttpRequest对象for (var i=0;i<arrXmlHttpTypes.length;i++){try{//创建XMLHttpRequest对象xmlHttp = new ActiveXObject(arrXmlHttpTypes[i]);//如果创建XMLHttpRequest对象成功,则跳出循环break;}catch(ex){//如果创建不成功,则从数组中取出下一个版本继续创建}}}//判断浏览器是否将XMLHttpRequest作为本地对象实现,针对IE7及以上,Firefox,Opera等浏览器else if(window.XMLHttpRequest){xmlHttp = new XMLHttpRequest();}}

  //创建XMLHttpRequest对象,调用前面定义好的函数 
creatXMLHTTP();

        if (xmlHttp!=null){//创建响应XMLHttpRequest对象状态变化的函数//创建http请求//发送http请求}else{alert("您的浏览器不支持XMLHTTP");}</pre>
2.注册回调函数。
   //创建响应XMLHttpRequest对象状态变化的函数xmlHttp.onreadystatechange = httpStateChange;
在异步调用时,XMLHttpRequest对象有几个不同的状态,这些状态表示了异步调用的过程。
0:未初始化状态,刚创建完一个XMLHttpRequest对象;
1:初始化状态,即XMLHttpRequest对象已经获得了要将数据发送到哪个服务器上、以什么方式发送等信息;
2:发送状态,XMLHttpRequest开始发送数据;
3:数据传送状态,此时XMLHttpRequest正在接受从服务器端返回的数据,但是数据还没有传送完毕;
4:完成状态:此时XMLHttpRequest对象已经将从服务器端返回的数据接受完毕。
 
 

使用XMLHttpRequest对象的onreadystatechange属性,可以设置响应XMLHttpRequest对象状态变化的函数。

设置回调函数时,不要在函数名后而加括号。加括号表示将回调函数的返回值注册给onreadystatechange属性。

 

3.使用open方法设置和服务器端交互的基本信息。
 //创建http请求xmlHttp.open("get","userName.txt", true);
XMLHttpRequest的open(method,URL,flag,name,password)方法用来初始化对象,后三个参数是可选的。
method:指定用什么方式向服务器发送http请求,参数值可以是get,post,head,put和delete五种。
URL:指定服务器的URL,也就是用户处理和返回数据的程序的URL。该URL可以是绝对地址,也可以是相对地址。
flag:指定提交http请求的方式,true指异步方式,为默认值;false指同步方式。
name和password:如果服务器需要验证,这两个参数用来提交用户名和密码。

4.设置发送的数据,开始和服务器端交互。

  //发送http请求xmlHttp.send(null);

发送http请求使用XMLHttpRequest的send(data)方法,data参数就是传递给open()方法中URL参数所指定的文件的参数。若果要传递多个参数,用”&”来分隔,不需要传递参数写”null”。


5.在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器端返回的数据,更新页面内容。

1)判断异步调用是否成功:

if (xmlHttp.readyState==4)//异步调用完毕
{if (xmlHttp.status==200 || xmlHttp.status==0)//异步调用成功||在本机上调试{                    }
}
readyState属性值为4,说明异步调用完成,但并不代表异步调用执行成功。XMLHttpRequest的status属性可以获得从服务器返回的状态码。0代表不能理解的http状态,通常只有在本地计算机打开文件时才会返回。比较常用的http状态码有以下三个:

200:服务器成功返回网页。

404:客户端请求的网页不存在。

503:服务器响应超时。


2)获得服务器返回的数据:

<span style="font-family:SimSun;font-size:18px;"><strong> var userNames = xmlHttp.responseText;</strong></span>

异步调用的最终目的是接收从服务器返回的数据,并根据该数据决定如何显示在客户端网页中。异步调用成功后,XMLHttpRequest对象通过使用以下4个属性来获得服务器返回的数据。

responseText:表示将服务器返回的数据以字符串形式返回。

responseXML:表示以XML的形式返回。

responseBody:表示以unsigned byte数组的形式返回。

responseStream:表示以IStream对象的形式返回。


3)局部更新:

<span style="font-family:SimSun;font-size:18px;"><strong>//查找用于显示提示信息的节点
var node = document.getElementById("myDiv");
//更新数据                   
node.firstChild.nodeValue = text;</strong></span>

获取服务器返回的数据之后就要显示出来。Ajax通过DOM来完成局部更新数据。

Ajax编程中离不开对XMLHttpRequest对象的使用,每次使用都是做这五步工作。面对重复的事情我们就要想办法了。由于这项编程步骤比较固定现在已经被封装好了,从而使代码重用,简化编程。但是想要成为一名优秀的程序员,还是有必要了解一下这五个步骤。





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC访问静态资源的三种方式

如何你的DispatcherServlet拦截 *.do这样的URL&#xff0c;就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”&#xff0c;拦截了所有的请求&#xff0c;同时对*.js,*.jpg的访问也就被拦截了。 目的&#xff1a;可以正常访问静态文件&#xff0c;不要找不到…

电脑如何进入bios模式_华硕笔记本电脑开机自动进入BIOS界面怎么办?

最近很多人的华硕牌子笔记本有问题&#xff0c;说自己开机就直接进入BIOS了。对于这些小白来说&#xff0c;一脸懵逼啊&#xff0c;不知道怎么解决&#xff0c;其实大家也不要着急&#xff0c;坚哥来简单帮大家分析一下。第一、可能系统的文件被更改&#xff0c;从而导致无法启…

springmvc在controller和视图之间传递参数

从视图向controller传递值&#xff0c; controller <--- 视图 1&#xff09;简单类型&#xff0c;如int, String, 应在变量名前加RequestParam注解&#xff0c;例如&#xff1a; RequestMapping("hello3")public String hello3( RequestParam("name" …

苹果手机怎么清理听筒灰尘_怎么清理手机听筒的灰尘?

作为一个专业的强迫症从业者&#xff0c;我已经看不惯手机听筒的灰尘很久了&#xff0c;在经历无数次失败之后&#xff08;针&#xff0c;牙刷&#xff0c;牙签&#xff0c;吸尘器等等&#xff09;。我必须要来分享一个超级实用的方法清理手机听筒的灰尘。那就是&#xff0c;起…

linux mrtg 命令,linux服务器之流量监控(MRTG)

本系列文章原则&#xff1a;灰常详细&#xff0c;灰常简单&#xff0c;新手包学包会&#xff01;因其简单&#xff0c;故未涉及安全性方面的考虑呵&#xff01;本实验服务器为rhel-5-server-i386&#xff0c;客户端为windows xp。本实验所用软件包均在rhel-5-server-i386-dvd.i…

搭建网站必不可少的知识14

安全组配置 “操作”-“安全组配置” 单击“内网入方向”&#xff0c;“添加安全组规则”默认配置即可“确定”。在公网入方向和公网出方向都这样添加上。&#xff08;如果存在就先删除后在添加&#xff09;。现在应该能登录了。 输入密码&#xff0c;点击“确定” 登录后只有一…

8代cpu能跑linux,Intel公布6/7/8代桌面CPU打漏洞补丁性能结果:影响很小

今天&#xff0c;Intel执行副总裁数据、数据中心事业部总经理Navin Shenoy(孙纳颐)发布了第二篇性能测试文章&#xff0c;针对客户端也就是桌面平台用户在打上修复“Spectre”和“Meltdown”漏洞补丁之后的实际情况。对于大部分普通电脑用户来说&#xff0c;性能的影响并不显著…

Spring mvc interceptor配置拦截器

原文&#xff1a;http://blog.csdn.net/liyisong2008/article/details/42915715 -------------------------------------------------------------------------- xml代码&#xff1a; [java] view plaincopy <?xml version"1.0" encoding"UTF-8"?>…

rm: 无法删除swap: 不允许的操作_safe-rm老板再也不用担心我删库跑路啦[视频]

saferm 老板再不怕我删库跑路https://www.zhihu.com/video/1177717527541731328在 linux 上&#xff0c;使用 rm 是一件非常危险的事情(最近又有朋友遇到了我才想起了写这篇文章)&#xff0c;如果不幸手残执行了 rm -rf 删除了重要文件&#xff0c;建议你准备收拾包袱跑路吧。既…

视频通信基础知识之采集

在之前的文章里&#xff0c;我们说了不少关于音视频相关的内容&#xff0c;但是一直没有系统的来介绍视频通信&#xff0c;接下来我们将出一个系列关于视频通信的文章。帮助大家对视频通信有一个更全面的认识。系列文大纲如下&#xff1a;视频通信采集视频通信处理视频通信编码…

Spring MVC 流程图

Spring工作流程描述1. 用户向服务器发送请求&#xff0c;请求被Spring 前端控制Servelt DispatcherServlet捕获&#xff1b;2. DispatcherServlet对请求URL进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;。然后根据该URI&#xff0c;调用HandlerMapping获…

kafka maven没有下载_Kafka 系列(三)——Kafka 生产者详解

首先介绍一下 Kafka 生产者发送消息的过程&#xff1a;Kafka 会将发送消息包装为 ProducerRecord 对象&#xff0c; ProducerRecord 对象包含了目标主题和要发送的内容&#xff0c;同时还可以指定键和分区。在发送 ProducerRecord 对象前&#xff0c;生产者会先把键和值对象序列…

linux 硬盘繁忙,icinga2 借助check_iostat.sh抓取linux服务器的diskIO(硬盘繁忙度)

icinga2 借助check_iostat.sh抓取linux服务器的diskIO(硬盘繁忙度)下载地址&#xff1a;https://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Iostat-Updated/details对脚本进行修改(默认为$12&#xff0c;12为w_await值&#xff0c;14为%util值)UTI…

centos7安装kubernetes1.9集群

节点规划 本次选用一个master节点&#xff0c;三个node节点来安装k8s集群。   节点IPM010.xx.xx.xxN010.xx.xx.xxN110.xx.xx.xxN210.xx.xx.xx集群启动前的准备(请用root用户执行) 节点准备工作(在每台机器上执行) 包括修改主机名&#xff0c;关闭防火墙等操作。  k8s集群会…

oracle中查询某张表的大小

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_nametable_name;--注&#xff0c;仅表数据的大小&#xff0c;不含索引、分区、LOB类型 select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segm…

python图像分割算法_OpenCV-Python 图像分割与Watershed算法 | 三十四

目标 在本章中&#xff0c; 我们将学习使用分水岭算法实现基于标记的图像分割 我们将看到&#xff1a;cv.watershed() 理论 任何灰度图像都可以看作是一个地形表面&#xff0c;其中高强度表示山峰&#xff0c;低强度表示山谷。你开始用不同颜色的水(标签)填充每个孤立的山谷(局…

linux dns 问题吗,Linux下DNS的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:37:06 BJ-linux system-config-network[4031]: - //etc/…

NEO从源码分析看共识协议

2019独角兽企业重金招聘Python工程师标准>>> 0x00 概论 不同于比特币使用的工作量证明&#xff08;PoW&#xff09;来实现共识&#xff0c;NEO提出了DBFT共识算法。DBFT改良自股权证明算法&#xff08;PoS&#xff09;&#xff0c;我没有具体分析过PoS的源码&#x…

oracle实现id自增和设置主键

1、关于主键&#xff1a;在建表时指定primary key字句即可&#xff1a; create table test( id number(6) primary key, name varchar2(30) ); 如果是对于已经建好的表&#xff0c;想增加主键约束&#xff0c;则类似语法&#xff1a; alter table test add constraint p…

python scrapy框架基如何实现多线程_Python实现在线程里运行scrapy的方法

本文实例讲述了Python实现在线程里运行scrapy的方法。分享给大家供大家参考。具体如下&#xff1a; 如果你希望在一个写好的程序里调用scrapy&#xff0c;就可以通过下面的代码&#xff0c;让scrapy运行在一个线程里。 """ Code to run Scrapy crawler in a thr…