XMLHttpRequest

XMLHttpRequest (XHR) 是一个 JavaScript类,包含将HTTP请求从网络浏览器异步传输到网络服务器的方法。这些方法允许基于浏览器的应用程序进行细粒度的服务器调用并把存储结果存储在XMLHttpRequest的responseText特性中。 XMLHttpRequest类是Ajax编程的一个组件。在Ajax出现之前,需要将网页表单完全发送到服务器,然后刷新整个浏览器页面。然后这个概念在Internet Explorer 5 (2001) 浏览器的 解释器 中实现。但是,原始的语法没有使用XMLHttpRequest标识符。相反,开发人员使用了标识符ActiveXObject("Msxml2.XMLHTTP")和ActiveXObject("Microsoft.XMLHTTP")。 到Internet Explorer 7 (2006),所有的浏览器都支持XMLHttpRequest标识符。 Opera 8.0 (2005),, and iCab (2005).

随着跨浏览器 JavaScript 库(例如 jQuery)的出现,开发人员可以间接调用 XMLHttpRequest 功能。

标准
万维网联盟 (W3C)于2006年4月5日发布了XMLHttpRequest对象的工作草案规范。 2008年2月25日,W3C发布了Working Draft Level 2规范。Level 2规范添加了监视事件进度、允许跨站点请求和处理字节流的方法。2011年底,Level 2规范被吸收到原始规范中。

2012年底,WHATWG接管开发并使用Web IDL维护动态文档。
XMLHttpRequest用法
构造器
生成发给Web服务器的异步请求首先要实例化分配内存)“XMLHttpRequest”对象。分配的内存(的地址)被赋值给变量。 JavaScript中实例化新对象的编程 语句 为newnew语句后跟对象的构造函数。面向对象语言的开发人员的习惯是使用与类名相同的名称来调用构造函数本例中,类名是XMLHttpRequest。实例化一个新的XMLHttpRequest并赋值给变量request:

var request = new XMLHttpRequest();

open方法
open方法准备XMLHttpRequest。它最多可接受五个参数,但只有前两个是必须的。

var request = new XMLHttpRequest();

request.open( RequestMethod, SubmitURL, AsynchronousBoolean, UserName, Password );

  • RequestMethod: 对于典型的数据量,HTTP请求方法可以是GET。在其他可用的请求方法中,POST将处理大量数据。收到返回字符串后,将DELETE请求方法发送到.open()以释放 XMLHttpRequest 内存。如果发送DELETE,则 SubmitURL 参数可为null。

: * request.open( "DELETE", null );

  • SubmitURL: SubmitURL是包含执行文件名和提交到Web服务器的任何参数的URL。如果URL包含主机名,则它一定是发送HTML文档的Web服务器。Ajax支持同源策略。
  • AsynchronousBoolean: 如果提供该参数,则应将其设置为true。如果设置为false,则浏览器将等待,直到收到返回字符串。不鼓励程序员将AsynchronousBoolean设置为false,浏览器可能会遇到异常错误。
  • UserName:如果提供,它将有助于验证用户身份。
  • Password: 如果提供,它将有助于验证用户身份。

setRequestHeader方法
如果调用POST请求方法,则需要额外发送媒体类型Content-Type: application/x-www-form-urlencoded。setRequestHeader方法允许程序将此或其他HTTP标头发送到Web服务器。其用法是setRequestHeader( HeaderField, HeaderValue )。要将表单数据发送到Web服务器,请执行request.send( FormData ),其中FormData是文本字符串。如果调用GET请求方法,则Web服务器只需要默认标头。要发送默认标头,请执行request.send( null ).
onreadystatechange事件监听器
onreadystatechange是一个回调方法,在整个Ajax生命周期中定期执行。要设置名为 ReadyStateMethod()的回调方法,语法为request.onreadystatechange = ReadyStateMethod。为了方便起见,该语法允许定义匿名方法。}}

CGI XMLHttpRequest的服务器组件是位于服务器上的可执行文件。操作系统将打开该文件并读取其机器指令。 XMLHttpRequest协议要求可执行文件输出文本字符串。

编译后的程序有两个文件:源代码和相应的可执行文件。

  • cd /usr/lib/cgi-bin
  • 编辑文件ajax.c:

#include

void main( void )
{
/ CGI requires the first line to output: /
printf( "Content-type: text/html\n" );

/ CGI requires the second line to output: /
printf( "\n" );

printf( "Hello World!
\n" );
}

  • 编辑源文件产生可执行文件:

cc ajax.c -o ajax

sudo cc ajax.c -o ajax

CGI浏览器组件与PHP浏览器组件相同,只是submit_url略有变化。 告诉Web服务器执行可执行文件的语法是/cgi-bin/后跟文件名。为了安全起见,可执行文件必须驻留在chroot 监狱中。在本例中,监狱是目录/usr/lib/cgi-bin/.

  • cd /var/www/html
  • 编辑文件ajax.html:

Hello World

Submit

参见

  • WebSocket
  • 表现层状态转换 (REST)

参考文献
注释
外部链接

评论 (0)

  • 还没有评论,来抢沙发吧。