使用技巧

XMLHttpRequest对象

日期:2012/3/27来源: 转载

XMLHttpRequest对象得到下列浏览器的支持:Internet Explorer5.0+\Safari 1.2,Mozilla 1.0 Firefox,Opera8+以及Netscape7.ie浏览器使用用ActiveXObject,而其他的浏览器使用名为XMLHttpRequest的javascript内建对象,如果需要针对不同的浏览器来创建此对象,可以用Try...catch语句。代码如下:

<script type="text/javascript">

function AjaxFunction()

{

var xmlHttp;

try

{

//Firefox,Opera8.0+,Safari

xmlHttp=new XMLHttpRequest();

}

catch(err)

{

//Internet EXplorer

try

{

xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

}

catch(err)

{

try

{

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

}

catch(err)

{

alert("您的浏览器不支持Ajax!");

return false;

}

}

}

}

</script>

还有一种检测方法:

<script type="javascript/txt">

xmlhttp=null;

if window.XMLHttpRequest)

{

//code for firefox,Opera,IE7,etc.

xmlhttp=new XMLHttpRequest();

}

else if(window.ActiveXObject)

{//code for IE6 ,IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

}

 

XMLHttpRequest对象的重要属性:

onreadystatechange属性存有处理服务器响应的函数。即当readyState值发生变化后需要执行的函数。

readyState属性存有服务器响应的状态信息。每当readyStaten改变时,就会执行onreadystatechange函数。

readystate属性可能的值如下:

0   请求未初始化,在调用open()之前,已经创建一个XMLHttpRequest对象,但是还没有初始化

1   在调用send()之前,已经调用了open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。

2   已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应

3   请求处理中,此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束

4   请求已经完成(可以访问服务器响应,并使用它)

 status属性:XMLHttpRequest对象的status属性一般用来返回服务器的HTTP状态码。status为200表示“成功”,status为404代表“页面未找到”。有时候,特别是刚开始学Ajax的时候,可能会将代码直接在本地运行。如果在本地运行(如:C:\ajax\helloworld.htm),那么status属性不管是在“成功”还是“页面未找到”的情况下,都返回的是0,而不是200和404。

status状态值

status属性描述了HTTP状态代码,当readyState值为3(正在接收中)或4(已加载)时,这个status属性才可用。当readyState的值小于3时试图存取status的值将引发一个异常。
长整形标准http状态码,定义如下: Number Description
100 Continue
101 Switching protocols
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Suitable
417 Expectation Failed
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported

 

statusText属性:返回当前请求的响应行状态;字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取,即仅当readyState值为3或4才可用。当readyState为其它值时试图存取statusText属性将引发一个异常。

responseText属性:可以通过responseText属性来取回由服务器返回的数据。当readyState值为0、1或2时,responseText包含一个空字符串。当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。当readyState为4(已加载)时,该responseText包含完整的响应信息。

 

responseXML属性
  此responseXML属性用于当接收到完整的HTTP响应时(readyState为4)描述XML响应;此时,Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。无论何时,只要readyState值不为4,那么该responseXML的值也为null。
  其实,这个responseXML属性值是一个文档接口类型的对象,用来描述被分析的文档。如果文档不能被分析(例如,如果文档不是良构的或不支持文档相应的字符编码),那么responseXML的值将为null。

 

XMLHttpRequest方法:

abort()方法
  你可以使用这个abort()方法来暂停与一个XMLHttpRequest对象相联系的HTTP请求,从而把该对象复位到未初始化状态。

 

open()方法:初始化一个XMLHttpRequest对象,参数解析如下:

第一个参数定义发送请求所使用的方法(GET/POST/PUT/DELETE/HEAD,为了把数据发送到服务器,应该使用POST方法;为了从服务器端检索数据,应该使用GET方法。)

第二个参数指定处理HTTP请求的服务器端的脚本文件,通常是一个URL地址,里面包含了动态文件,扩展名为ASP/PHP(也可以是一个相对的地址)。

第三个参数定义对请求进行处理的方式,有两个值:TRUE表示进行异步处理(默认值);FALSE表示同步处理。

 第四个参数和第五个参数是用户名和密码,用于需要登录或认证的服务器。在调用open()方法后,XMLHttpRequest对象把它的readyState属性设置为1(打开)并且把responseText、responseXML、status和statusText属性复位到它们的初始值。另外,它还复位请求头部。注意,如果你调用open()方法并且此时readyState为4,则XMLHttpRequest对象将复位这些值。


send()方法:在通过调用open()方法准备好一个请求之后,你需要把该请求发送到服务器。仅当readyState值为1时,你才可以调用send()方法;否则的话,XMLHttpRequest对象将引发一个异常。该请求被使用提供给open()方法的参数发送到服务器。当async参数为true时,send()方法立即返回,从而允许其它客户端脚本处理继续。在调用send()方法后,XMLHttpRequest对象把readyState的值设置为2(发送)。当服务器响应时,在接收消息体之前,如果存在任何消息体的话,XMLHttpRequest对象将把readyState设置为3(正在接收中)。当请求完成加载时,它把readyState设置为4(已加载)。对于一个HEAD类型的请求,它将在把readyState值设置为3后再立即把它设置为4。
send()方法使用一个可选的参数-该参数可以包含可变类型的数据。典型地,你使用它并通过POST方法把数据发送到服务器。另外,你可以显式地使用null参数调用send()方法,这与不用参数调用它一样。对于大多数其它的数据类型,在调用send()方法之前,应该使用setRequestHeader()方法(见后面的解释)先设置Content-Type头部。如果在send(data)方法中的data参数的类型为DOMString,那么,数据将被编码为UTF-8。如果数据是Document类型,那么将使用由data.xmlEncoding指定的编码串行化该数据。

 setRequestHeader()方法

  该setRequestHeader(DOMString header,DOMString value)方法用来设置请求的头部信息。当readyState值为1时,你可以在调用open()方法后调用这个方法;否则,你将得到一个异常。

  getResponseHeader()方法

  getResponseHeader(DOMString header,value)方法用于检索响应的头部值。仅当readyState值是3或4(换句话说,在响应头部可用以后)时,才可以调用这个方法;否则,该方法返回一个空字符串。

  getAllResponseHeaders()方法

  该getAllResponseHeaders()方法以一个字符串形式返回所有的响应头部(每一个头部占单独的一行)。如果readyState的值不是3或4,则该方法返回null。

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消