编写第一个Ajax例子

1. 神奇的XMLHttpRequest对象

IE7+ Firefox Opera Chrome 和 Safari 都支持原生的 XHR 对象,在这些浏览器中创建XHR对象要像下面这样使用XMLHttpRequert 构造函数。

var xhr = new XMLHttpRequest();

如果需要兼容 IE 低版本可以这样来使用:

//支持早期IE浏览器的XMLHttpRequest对象
		function createXHR(){
			if(typeof XMLHttpRequest !="undefined"){
				return new XMLHttpRequest();
			}else if(typeof ActiveXObject !="undefined"){
				if(typeof argument.callee.activeXString !="string"){
				var versions=["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"] ,
				     i,len;

				for ( i=0,len=versions.length;i<len;i++){
					try {
						new ActiveXObject(versions[i]);
						argument.callee.activeXString=versions[i];
						break;
					}catch(ex){
						//跳过
					}
					}
				}
				return new ActiveXObject(argument.callee.activeXString);
			}else{
				throw new Error("No XHR object available.");
			}
			
		}
		var xhr=createXHR();

2. XMLHttpRequest对象的使用

在使用XHR对象(即XMLHttpRequest对象)时,要调用的第一个方法是 open() ,它接受3个参数: 要发送的请求类型(“get”“post”等) 请求的URL和表示是否异步请求的布尔值。下面是调用这个方法的例子。

xhr.open("get","example.php",false);

这行代码会启动一个针对 example.php 的 GET 请求。有两点需要注意:一是 URL 相对于执行代码的当前页面(当然也可以使用绝对路径);二是调用 open() 并不会真正的发送请求,二是启动一个请求以备发送。

只能向同一个域中使用相同端口和协议的 URL 发送请求。如果 URL 与启动请求的页面有任何差别,都会引发安全问题。

要发送特定的请求,必须像下面这样调用 send() 方法:

xhr.send(null);

这里的 send() 方法接受一个参数,即要作为请求主体发送的数据。如果不需要通过请求主体发送数据,则必须传入 null 因为这个参数对有些浏览器来说是必需的。调用 send() 之后,请求就会被分派到服务器。

由于这次请求是同步的。 javascript 代码会等到服务器响应之后字啊继续执行。在收到响应后,响应的数据会自动填充XHR对象的属性,相关的属性简介如下。

  • responseText   :  作为响应主体被返回的文本。
  • responseXML : 如果响应的内容类型是“ text/xml ”或 “application/xml”,这个属性中奖保存包含着响应数据的 XML DOM文档。
  • status : 响应的 HTTP 状态。
  • statusText : HTTP状态的说明。

在接收到响应后,第一步是检查 status 属性,已确定响应已经成功返回。一般来说,可以将 HTTP 状态代码为200作为成功的标志。此时,responseText 属性的内容已经就绪,而且在内容类型正确的情况下,responseXml也应该能够访问了。此外,状态代码为304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本;当然,也意味着响应是有效的。为确保接收到适当的响应,应该像下面这样检测上述这两种状态代码:

if(xhr.readyState==4){
				if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
					alert(xhr.responseText);
				}else{
					alert("Rewquest was unsuccessfull:"+xhr.status);
				}
			}

根据返回的状态代码,这个例子可能会显示由服务器返回的内容,也可能会显示一条错误消息。建议应该要通过 status 来决定下一步的操作,不要依赖 statusText ,因为后者在跨浏览器使用时不太可靠。另外,无论内容类型是什么,响应主体的内容都会保存到 responseText 属性中;而对于非 XML 数据而言, responseXML 属性的值将为 null 。

像前面这样发送同步请求当然没有问题,但多数情况下,我们还是要发送异步请求,才能让 javascript 继续执行而不必等待响应。此时,可以检测XHR对象的 readyState 属性,该属性表示请求/响应过程的当前活动阶段。这个属性可取的值如下。

  • 0 :未初始化。尚未调用 open() 方法。
  • 1 :启动。已经调用 open() 方法,但未调用 send() 方法。
  • 2 :发送。已经调用 send() 方法,但尚未接收到响应。
  • 3 :接收。已经接收到部分响应数据。
  • 4 :完成。已经接收到全部响应数据,而且已经可以在客户端使用了。

只要 readyState 属性的值有一个值变成另一个值,都会触发一次 readystatechange 事件。可以利用这个时间来检测每次状态变化后 readyState 的值。通常,我们只对 readyState 值为4的阶段感兴趣,以为这时所有数据都已经就绪。不过,必须再调用 open() 方法之前指定 readystatechange 时间处理程序才能确保跨浏览器兼容性。下面来看一个例子。

                var xhr=createXHR();
		xhr.onreadystatechange=function(){
			if(xhr.readyState==4){
				if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
					alert(xhr.responseText);
				}else{
					alert("Rewquest was unsuccessfull:"+xhr.status);
				}
			}
		};
		xhr.open("get","test.php",true);
		xhr.send(null);
另外,在接收到响应之前还可以调用 abort() 方法来取消异步请求


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ajax经典实例+代码大全 绝对经典 -------- 目录说明 -------- database 目录存放数据库SQL文件 java 目录存放java源文件 webapp 目录存放实例页面及JSP源文件 -------------- 数据库安装说明 -------------- 了解MySQL的用户可以直接使用自己熟悉的方式创建名为ajax的数据库,并将ajax.sql文件导入即可。 下面是简要操作方法: 1. 实例数据库在MySQL 5.0.27 版本下测试通过 2. 将database目录中ajax.sql文件复制到C:\ 3. 进入MySQL安装目录中的bin目录 4. 输入 mysql -u root -p ,然后输入密码登录本地MySQL服务器 5. 输入 CREATE DATABASE ajax DEFAULT CHARACTER SET utf8; 创建名为ajax的数据库 6. 输入 use ajax 7. 输入 source c:\ajax.sql 执行数据库初始化语句 ------------------ Java源文件使用说明 ------------------ 实例中大部分文件为HTML及JSP文件,部分Java源文件存放在java目录中。 可将目录中的内容作为Eclipse的一个项目导入Eclipse中使用。 ----------- WEB发布方法 ----------- 所有实例在jdk 1.4.2 + Tomcat 5.0.28 环境下测试通过。 将webapp目录中的内容复制到Tomcat的webapps目录中作为一个web应用发布即可。 启动Tomcat前注意修改 ajax/WEB-INF/classes/ajax_db.properties 文件。 将其中的URL、USER和PASSWORD属性根据实际情况进行修改。 Tomcat正常启动后使用 http://localhost:8080/ajax 进行访问 +=========================================================================================== 最后注释: 可能还有一点,就是把你的ajax密码定位好 路径是:${ajax}\ajax\WEB-INF\classes\ajax_db.properties,用记事本打开。那个${ajax}就是你当前存放ajax这个文件夹的路 径 DRIVERS=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/ajax?useUnicode=true&characterEncoding=utf8 USER=root PASSWORD=ajax 里面的代码是这样写的,把最后一行的那个对应的密码改为你自己数据库的代码就OK

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值