AJAX向服务器发送与请求(四)

要想把请求发送到服务器,我们就需要使用 open() 方法和 send() 方法。

1.XMLHttpRequest.open()

初始化 HTTP 请求参数

语法

open(method, url, async, username, password)

method 参数是用于请求的 HTTP 方法。值包括 GETPOST HEAD

url 参数是请求的主体。大多数浏览器实施了一个同源安全策略,并且要求这个 URL 与包含脚本的文本具有相同的主机名和端口。

async 参数指示请求使用应该异步地执行。如果这个参数是 false,请求是同步的,后续对 send() 的调用将阻塞,直到响应完全接收。如果这个参数是 true 或省略,请求是异步的,且通常需要一个 onreadystatechange 事件句柄。

username password 参数是可选的,为 url 所需的授权提供认证资格。如果指定了,它们会覆盖 url 自己指定的任何资格。

 

2.XMLHttpRequest.send()

发送一个 HTTP 请求

语法

send(body)

如果通过调用 open() 指定的 HTTP 方法是 POST PUTbody 参数指定了请求体,作为一个字符串或者 Document 。如果请求体不适必须的话,这个参数就为 null。对于任何其他方法,这个参数是不可用的,应该为 null(有些实现不允许省略该参数)。

说明

这个方法导致一个 HTTP 请求发送。如果之前没有调用 open(),或者更具体地说,如果 readyState 不是 1send() 抛出一个异常。否则,它发送一个 HTTP 请求,该请求由以下几部分组成:

· 之前调用 open() 时指定的 HTTP 方法、URL 以及认证资格(如果有的话)。

· 之前调用 setRequestHeader() 时指定的请求头部(如果有的话)。

· 传递给这个方法的 body 参数。

一旦请求发布了,send() readyState 设置为 2,并触发 onreadystatechange 事件句柄。

如果之前调用的 open() 参数 async false,这个方法会阻塞并不会返回,直到 readyState 4 并且服务器的响应被完全接收。否则,如果 async 参数为 true,或者这个参数省略了,send() 立即返回,并且正如后面所介绍的,服务器响应将在一个后台线程中处理。

如果服务器响应带有一个 HTTP 重定向,send() 方法或后台线程自动遵从重定向。当所有的 HTTP 响应头部已经接收,send() 或后台线程把 readyState 设置为 3 并触发 onreadystatechange 事件句柄。如果响应较长,send() 或后台线程可能在状态 3 中触发 onreadystatechange 事件句柄:这可以作为一个下载进度指示器。最后,当响应完成,send() 或后台线程把 readyState 设置为 4,并最后一次触发事件句柄。

 

例:如果我们假设 HTML 文件和 动态文件(asp.netPHP等) 文件位于相同的目录,那么代码是这样的:

xmlHttp.open("GET","time.asp",true);

xmlHttp.send(null);//null表示清空

 

注:xmlhttp.open("POST", "AJAX1.ashx?&id=2&Chana=" + encodeURI("中国"), false);

 //AJAX1.ashx请求还可以在他后面加参数;

 //注意的是:如果参数是中文要用encodeURL括起来,不然会出乱码。

//XMLHTTP默认不是同步请求的,也就是open方法并不像webclickDownloadString那样把服务器返回的数据拿到才返回,是异步的,因此需要监听onreadystatechange事件。

posted @ 2011-10-12 11:53  放眼世界  阅读(225)  评论(0编辑  收藏  举报