文章教程

18.3PHP与AJAX

9/17/2020 9:26:54 PM 人评论 次浏览

18.3 PHP与AJAX

AJAX是运行在浏览器端的技术,它在浏览器端和服务器端之间使用异步技术传输数据。但完整的AJAX的应用还需要服务器端的组件,毕竟,浏览器端所有的请求将要由服务器端处理。浏览器端仅仅是通过JavaScript发出请求,并等待服务器的响应,最后处理服务器端传来的数据。服务器端可以使用任何一种语言实现应用,在本书中这种语言只能是PHP。本节就向读者介绍AJAX和PHP在Web开发中的结合应用。

18.3.1 创建XMLHttpRequest对象

XMLHttpRequest对象是AJAX的关键所在,也是使用XMLHttpRequest对象是实现AJAX技术的第一步。XMLHttpRequest是一个JavaScript对象,创建该对象很简单,如下代码所示。


01 <script language="javascript">

02 var xmlHttp=new XMLHttpRequest();

03 </script>


【代码解析】这段代码创建了一个XMLHttpRequest对象,并将其赋给JavaScript变量xmlHttp,该变量即代表了XMLHttpRequest对象。但是,由于不同的浏览器使用不同的方法创建XMLHttpRequest对象,例如,IE就使用ActiveXObject。下面的JavaScript代码解决了这个问题。


01 var xmlHttp=null

02 if(window.xmlHttpRequest)

03 {

04 xmlHttp=new xmlHttpRequest()

05 }

06 else if(window.ActiveXObject)

07 {

08 xmlHttp=new ActiveXObject("Microsoft.xmlHTTP")

09 }


【代码解析】这段代码第1行定义了一个变量xmlHttp,将来作为XMLHttpRequest对象来使用,将其赋值为null。然后判断window.xmlHttpRequest对象是否存在,如果存在就创建该对象。否则,就创建ActiveXObject对象,如代码第8行所示。这里的参数Microsoft.xmlHTTP是ActiveX对象的ID。

然而,这样创建XMLHttpRequest请求在某些情况下仍然会有问题。因为ActiveXObject方法调用所使用的参数可能会有所不同,除了Microsoft.xmlHTTP,对于更新版本的IE浏览器,该参数就是Msxml2.XMLHTTP。另外,如果试图在浏览器端创建一个不存在的ActiveX对象,应该抛出一个异常。所以,更完整的创建XMLHttpRequest对象的JavaScript程序如代码18-1所示。

代码18-1 完整的创建XMLHttpRequest对象的JavaScript程序18-1.js


01 function GetXmlHttpRequest()

02 {

03 var xmlHttp=null;

04 try

05 {

06 xmlHttp=new XMLHttpRequest();//对于Firefox等浏览器

07 }

08 catch(e)

09 {

10 try

11 {

12 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//对于IE浏览器

13 }

14 catch(e)

15 {

16 try

17 {

18 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

19 }

20 catch(e)

21 {

22 xmlHttp=false;

23 }

24 }

25 }

26

27 return xmlHttp;

28 }


【代码解析】这段代码将创建XMLHttpRequest对象的功能封装在一个函数之内。下面对创建XMLHttpRequest对象的步骤加以说明。

(1)建立一个变量xmlHttp来引用即将创建的XMLHttpRequest对象,如代码第3行所示。

(2)尝试在非IE浏览器端创建该对象,如代码第6行所示。如果成功,则不再执行后续代码,变量xmlHttp即为所创建的XMLHttpRequest对象。

(3)如果上步创建失败,则尝试在IE浏览器中使用Msxml2.XMLHTTP创建XMLHttpRequest对象。如果成功,则不再执行后续代码,变量xmlHttp即为所创建的XMLHttpRequest对象。

(4)如果上步失败,再尝试使用Microsoft.XMLHTTP创建该对象。如果成功,变量xmlHttp即为所创建的XMLHttpRequest对象。

(5)如果以上步骤都失败,则该对象赋值为false,表示创建XMLHttpRequest对象失败。

教程类别