<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=XMLHttpRequest</id>
	<title>XMLHttpRequest - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=XMLHttpRequest"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=XMLHttpRequest&amp;action=history"/>
	<updated>2026-06-25T09:47:11Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=XMLHttpRequest&amp;diff=58425&amp;oldid=prev</id>
		<title>imported&gt;InternetArchiveBot：​Add 11 books for verifiability (20240107)) #IABot (v2.0.9.5) (GreenC bot</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=XMLHttpRequest&amp;diff=58425&amp;oldid=prev"/>
		<updated>2024-01-08T01:32:20Z</updated>

		<summary type="html">&lt;p&gt;Add 11 books for verifiability (20240107)) #IABot (v2.0.9.5) (&lt;a href=&quot;/index.php?title=User:GreenC_bot&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC bot（页面不存在）&quot;&gt;GreenC bot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
{{HTTP}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;XHR&amp;#039;&amp;#039;&amp;#039;) 是一个 [[JavaScript]][[类_(计算机科学)|类]]{{efn|尽管一些文献 XMLHttpRequest 称为[[API]]， 从技术上讲，它是一个使用 &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt;语句[[构造函数（面向对象编程）|实例化]]到[[对象（计算机科学）|对象]][[变量（计算机科学）|变量]]的类[[声明（计算机科学）|声明]].}}，包含将[[HTTP]]请求从[[网络浏览器]]异步传输到[[网络服务器]]的[[方法_(電腦科學)|方法]]。&amp;lt;ref name=&amp;quot;adp-92_quote1&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/92 92]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
  | quote = Javascript lacks a portable mechanism for general network communication[.] ... But thanks to the XMLHttpRequest object, ... Javascript code can make HTTP calls back to its originating server[.]&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;这些方法允许基于浏览器的应用程序进行细粒度的服务器调用并把存储结果存储在XMLHttpRequest的&amp;lt;code&amp;gt;responseText&amp;lt;/code&amp;gt;[[特性_(计算机科学)|特性]]中。&amp;lt;ref name=&amp;quot;adp-92&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/92 92]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt; &amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;类是[[AJAX|Ajax编程]]的一个组件。在Ajax出现之前，需要将[[网页表单]]完全发送到服务器，然后刷新整个浏览器页面。&amp;lt;ref name=&amp;quot;adp-92&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==历史==&lt;br /&gt;
“XMLHttpRequest”类背后的概念是由[[Microsoft Outlook]] 的开发人员于2000年提出的——可在[[Windows 2000]]操作系统上使用。&amp;lt;ref name=&amp;quot;ALEXHOPMANN_quote1&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
   |url=http://www.alexhopmann.com/xmlhttp.htm&lt;br /&gt;
   |title=Article on the history of XMLHTTP by an original developer&lt;br /&gt;
   |date=2007-01-31&lt;br /&gt;
   |publisher=Alexhopmann.com&lt;br /&gt;
   |archive-url=https://web.archive.org/web/20090130092236/http://www.alexhopmann.com/xmlhttp.htm&lt;br /&gt;
   |archive-date=2009-01-30|access-date=2009-07-14&lt;br /&gt;
   |quote=The reality is that the client architecture of GMail appears to follow the rough design of the Exchange 2000 implementation of Outlook Web Access for IE5 and later which shipped way back in 2000.}}&amp;lt;/ref&amp;gt;然后这个概念在[[Internet Explorer 5]] (2001) 浏览器的 [[直譯器|解释器]] 中实现。{{efn|现代浏览器使用[[即时编译|即时编译器]]调用了[[JavaScript引擎]]。}}但是，原始的[[语法（编程语言）|语法]]没有使用&amp;lt;code&amp;gt;XMLHttpRequest&amp;lt;/code&amp;gt;[[标识符_(计算机语言)|标识符]]。相反，开发人员使用了标识符&amp;lt;code&amp;gt;ActiveXObject(&amp;quot;Msxml2.XMLHTTP&amp;quot;)&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;)&amp;lt;/code&amp;gt;。 &amp;lt;ref name=&amp;quot;adp-93&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/93 93]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;到[[Internet Explorer 7]] (2006)，所有的浏览器都支持&amp;lt;code&amp;gt;XMLHttpRequest&amp;lt;/code&amp;gt;标识符。&amp;lt;ref name=&amp;quot;adp-93&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;XMLHttpRequest&amp;lt;/code&amp;gt;标识符现在是所有现代浏览器的[[事实标准]]，包括[[Mozilla]]的[[Gecko (layout engine)|Gecko layout engine]] (2002), [[Konqueror]] (2002), [[Safari]] 1.2 (2004),&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url=http://weblogs.mozillazine.org/hyatt/archives/2004_02.html&lt;br /&gt;
  |title=Archived news from Mozillazine stating the release date of Safari 1.2&lt;br /&gt;
  |publisher=Weblogs.mozillazine.org&lt;br /&gt;
  |access-date=2009-07-14 |archive-date=2009-06-02&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20090602041255/http://weblogs.mozillazine.org/hyatt/archives/2004_02.html |url-status=dead }}&amp;lt;/ref&amp;gt; [[Opera_(瀏覽器)|Opera]] 8.0 (2005),&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url=http://www.opera.com/press/releases/2005/06/16/&lt;br /&gt;
  |title=Press release stating the release date of Opera 8.0 from the Opera website&lt;br /&gt;
  |publisher=Opera.com&lt;br /&gt;
  |date=2005-04-19&lt;br /&gt;
  |access-date=2009-07-14&lt;br /&gt;
  |archive-date=2009-01-20&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20090120083247/http://www.opera.com/press/releases/2005/06/16/&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;, and [[iCab]] (2005).&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |author=Soft-Info.org&lt;br /&gt;
  |url=http://www.soft-info.org/browsers/icab-10109.html&lt;br /&gt;
  |title=Detailed browser information stating the release date of iCab 3.0b352&lt;br /&gt;
  |publisher=Soft-Info.com&lt;br /&gt;
  |access-date=2009-07-14&lt;br /&gt;
  |archive-date=2011-07-25&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20110725184217/http://www.soft-info.org/browsers/icab-10109.html&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随着跨浏览器 JavaScript 库（例如 [[jQuery]]）的出现，开发人员可以间接调用 XMLHttpRequest 功能。&lt;br /&gt;
&lt;br /&gt;
==标准==&lt;br /&gt;
[[万维网联盟]] (W3C)于2006年4月5日发布了XMLHttpRequest对象的工作草案规范。&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
   |url=http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/&lt;br /&gt;
   |title=Specification of the XMLHttpRequest object from the Level 1 W3C Working Draft released on April 5th, 2006&lt;br /&gt;
   |publisher=W3.org&lt;br /&gt;
   |access-date=2009-07-14&lt;br /&gt;
   |archive-date=2008-05-16&lt;br /&gt;
   |archive-url=https://web.archive.org/web/20080516060525/http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/&lt;br /&gt;
   |dead-url=no&lt;br /&gt;
   }}&amp;lt;/ref&amp;gt; {{efn|该标准是[[Opera Software]]的[[Anne van Kesteren]]和W3C的Dean Jackson[[审稿]]。}}2008年2月25日，W3C发布了Working Draft Level 2规范。&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url=http://www.w3.org/TR/2008/WD-XMLHttpRequest2-20080225/&lt;br /&gt;
  |title=Specification of the XMLHttpRequest object from the Level 2 W3C Working Draft released on February 25th, 2008&lt;br /&gt;
  |publisher=W3.org&lt;br /&gt;
  |access-date=2009-07-14&lt;br /&gt;
  |archive-date=2023-04-01&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20230401201905/https://www.w3.org/TR/2008/WD-XMLHttpRequest2-20080225/&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;Level 2规范添加了监视事件进度、允许跨站点请求和处理字节流的方法。2011年底，Level 2规范被吸收到原始规范中。&amp;lt;ref&amp;gt;{{Cite web&lt;br /&gt;
  |url=http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html&lt;br /&gt;
  |title=XMLHttpRequest Editor&amp;#039;s Draft 5 December 2011&lt;br /&gt;
  |publisher=w3.org&lt;br /&gt;
  |access-date=5 December 2011&lt;br /&gt;
  |archive-date=2019-03-23&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20190323032415/https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2012年底，[[WHATWG]]接管开发并使用[[Web IDL]]维护[[动态文档]]。&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url=https://xhr.spec.whatwg.org/#specification-history&lt;br /&gt;
  |title=XMLHttpRequest Standard/#specification-history&lt;br /&gt;
  |access-date=2023-10-17&lt;br /&gt;
  |archive-date=2023-11-08&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20231108152833/https://xhr.spec.whatwg.org/#specification-history&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
==XMLHttpRequest用法==&lt;br /&gt;
&lt;br /&gt;
===构造器===&lt;br /&gt;
生成发给[[網頁伺服器|Web服务器]]的异步请求首先要[[實例|实例化]][[对象生命周期|分配内存]]）“XMLHttpRequest”对象。分配的内存（的地址）被赋值给[[变量_(程序设计)|变量]]。 JavaScript中实例化新对象的编程 [[陳述式|语句]] 为&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;[[New_(C%2B%2B)|new]]&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;。&amp;lt;ref name=&amp;quot;jdg-82&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Flanagan&lt;br /&gt;
  | first = David&lt;br /&gt;
  | title = JavaScript, The Definitive Guide&lt;br /&gt;
  | url = https://archive.org/details/javascriptdefini00flan&lt;br /&gt;
  | publisher = O&amp;#039;Reilly and Associates&lt;br /&gt;
  | year = 1998&lt;br /&gt;
  | page = [https://archive.org/details/javascriptdefini00flan/page/82 82]&lt;br /&gt;
  | isbn = 1-56592-392-8}}&amp;lt;/ref&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;语句后跟对象的[[构造函数]]。面向对象语言的开发人员的习惯是使用与类名相同的名称来调用构造函数&amp;lt;ref name=&amp;quot;pmwd-162&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last1 = Welling&lt;br /&gt;
  | first1 = Luke&lt;br /&gt;
  | last2 = Thomson&lt;br /&gt;
  | first2 = Laura&lt;br /&gt;
  | title = PHP and MySQL Web Development&lt;br /&gt;
  | publisher = Sams Publishing&lt;br /&gt;
  | year = 2005&lt;br /&gt;
  | page = 162&lt;br /&gt;
  | isbn = 0-672-32672-8&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;本例中，类名是&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;。实例化一个新的&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;并赋值给变量&amp;lt;code&amp;gt;request&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;var request = new XMLHttpRequest();&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;xhr_constructor&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 | title=XMLHttpRequest Standard; The constructor&lt;br /&gt;
 | url=https://xhr.spec.whatwg.org/#constructors&lt;br /&gt;
 | access-date=2023-04-10&lt;br /&gt;
 | archive-date=2023-11-08&lt;br /&gt;
 | archive-url=https://web.archive.org/web/20231108152833/https://xhr.spec.whatwg.org/#constructors&lt;br /&gt;
 | dead-url=no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===open方法===&lt;br /&gt;
open方法准备&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;。&amp;lt;ref name=&amp;quot;adp-100&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/100 100]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;它最多可接受五个参数，但只有前两个是必须的。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;var request = new XMLHttpRequest();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;request.open( RequestMethod, SubmitURL, AsynchronousBoolean, UserName, Password );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RequestMethod&amp;#039;&amp;#039;&amp;#039;: 对于典型的数据量，[[超文本传输协议#请求方法|HTTP请求方法]]可以是&amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;。在其他可用的请求方法中，&amp;lt;code&amp;gt;[[POST (HTTP)|POST]]&amp;lt;/code&amp;gt;将处理大量数据。&amp;lt;ref name=&amp;quot;adp-96&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/96 96]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;收到返回字符串后，将DELETE请求方法发送到&amp;lt;code&amp;gt;.open()&amp;lt;/code&amp;gt;以释放 XMLHttpRequest 内存。&amp;lt;ref name=&amp;quot;rfc_9110-method_overview&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 | title=HTTP Documentation&lt;br /&gt;
 | date=June 2022&lt;br /&gt;
 | url=https://httpwg.org/specs/rfc9110.html#method.overview&lt;br /&gt;
 | access-date=2023-04-12&lt;br /&gt;
 | archive-date=2023-10-03&lt;br /&gt;
 | archive-url=https://web.archive.org/web/20231003104525/https://httpwg.org/specs/rfc9110.html#method.overview&lt;br /&gt;
 | dead-url=no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;如果发送&amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;，则 SubmitURL 参数可为&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;。&lt;br /&gt;
: * &amp;lt;code&amp;gt;request.open( &amp;quot;DELETE&amp;quot;, null );&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SubmitURL&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;SubmitURL&amp;#039;&amp;#039;是包含执行文件名和提交到Web服务器的任何参数的[[URL]]。如果URL包含主机名，则它一定是发送HTML文档的Web服务器。Ajax支持[[同源策略]]。&amp;lt;ref name=&amp;quot;adp-98&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/98 98]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AsynchronousBoolean&amp;#039;&amp;#039;&amp;#039;: 如果提供该参数，则应将其设置为true。如果设置为false，则浏览器将等待，直到收到返回字符串。不鼓励程序员将AsynchronousBoolean设置为false，浏览器可能会遇到异常错误。&amp;lt;ref name=&amp;quot;xhr_open_method&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 | title=XMLHttpRequest Standard; The open method&lt;br /&gt;
 | url=https://xhr.spec.whatwg.org/#the-open()-method&lt;br /&gt;
 | access-date=2023-04-12&lt;br /&gt;
 | archive-date=2023-11-08&lt;br /&gt;
 | archive-url=https://web.archive.org/web/20231108152833/https://xhr.spec.whatwg.org/#the-open()-method&lt;br /&gt;
 | dead-url=no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UserName&amp;#039;&amp;#039;&amp;#039;:如果提供，它将有助于验证用户身份。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Password&amp;#039;&amp;#039;&amp;#039;: 如果提供，它将有助于验证用户身份。&lt;br /&gt;
&lt;br /&gt;
===setRequestHeader方法===&lt;br /&gt;
如果调用&amp;lt;code&amp;gt;[[POST (HTTP)|POST]]&amp;lt;/code&amp;gt;请求方法，则需要额外发送[[媒体类型]]&amp;lt;code&amp;gt;Content-Type: application/x-www-form-urlencoded&amp;lt;/code&amp;gt;。&amp;lt;ref name=&amp;quot;adp-97&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/97 97]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;code&amp;gt;setRequestHeader&amp;lt;/code&amp;gt;方法允许程序将此或其他[[HTTP标头]]发送到Web服务器。其用法是&amp;lt;code&amp;gt;setRequestHeader( HeaderField, HeaderValue )&amp;lt;/code&amp;gt;。&amp;lt;ref name=&amp;quot;adp-100&amp;quot;/&amp;gt;启用&amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt;请求方法:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;request.setRequestHeader( &amp;quot;Content-Type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot; );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===send方法===&lt;br /&gt;
如果调用&amp;lt;code&amp;gt;[[POST (HTTP)|POST]]&amp;lt;/code&amp;gt;请求方法，则Web服务器期望从标准输入流读取[[網頁表單|表单数据]]。&amp;lt;ref name=&amp;quot;jdg-511&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Flanagan&lt;br /&gt;
  | first = David&lt;br /&gt;
  | title = JavaScript, The Definitive Guide&lt;br /&gt;
  | url = https://archive.org/details/javascriptdefini00flan&lt;br /&gt;
  | publisher = O&amp;#039;Reilly and Associates&lt;br /&gt;
  | year = 1998&lt;br /&gt;
  | page = [https://archive.org/details/javascriptdefini00flan/page/511 511]&lt;br /&gt;
  | isbn = 1-56592-392-8}}&amp;lt;/ref&amp;gt;要将表单数据发送到Web服务器，请执行&amp;lt;code&amp;gt;request.send( FormData )&amp;lt;/code&amp;gt;，其中FormData是文本字符串。如果调用&amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;请求方法，则Web服务器只需要默认标头。&amp;lt;ref name=&amp;quot;adp-26&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/26 26]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;要发送默认标头，请执行&amp;lt;code&amp;gt;request.send( null )&amp;lt;/code&amp;gt;.{{efn|The &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; placeholder is currently in retirement but recommended.}} &lt;br /&gt;
===onreadystatechange事件监听器===&lt;br /&gt;
&amp;lt;code&amp;gt;onreadystatechange&amp;lt;/code&amp;gt;是一个回调方法，在整个Ajax生命周期中定期执行。&amp;lt;ref name=&amp;quot;adp-25&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
  | last = Mahemoff&lt;br /&gt;
  | first = Michael&lt;br /&gt;
  | title = Ajax Design Patterns&lt;br /&gt;
  | url = https://archive.org/details/ajaxdesignpatter00mahe&lt;br /&gt;
  | publisher = O&amp;#039;Reilly&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | page = [https://archive.org/details/ajaxdesignpatter00mahe/page/25 25]&lt;br /&gt;
  | isbn = 978-0-596-10180-0&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;要设置名为 &amp;lt;code&amp;gt;ReadyStateMethod()&amp;lt;/code&amp;gt;的回调方法，语法为&amp;lt;code&amp;gt;request.onreadystatechange = ReadyStateMethod&amp;lt;/code&amp;gt;。{{efn|For safety, this assignment should follow the execution of &amp;lt;code&amp;gt;request.open()&amp;lt;/code&amp;gt;.}}为了方便起见，该语法允许定义匿名方法。&amp;lt;ref name=&amp;quot;adp-25&amp;quot;/&amp;gt;定义匿名回调方法:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
request.onreadystatechange = function()&lt;br /&gt;
{&lt;br /&gt;
// code omitted&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;生命周期经历几个阶段 - 从0到4。阶段0是调用&amp;lt;code&amp;gt;open()&amp;lt;/code&amp;gt;方法之前，阶段4是文本字符串到达时。&amp;lt;ref name=&amp;quot;adp-26&amp;quot;/&amp;gt;为了监视生命周期，&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;具有可用的&amp;lt;code&amp;gt;readyState&amp;lt;/code&amp;gt;属性。 第1-3阶段不明确，不同浏览器的解释也不同。&amp;lt;ref name=&amp;quot;adp-100&amp;quot;/&amp;gt;尽管如此，一种解释是：&amp;lt;ref name=&amp;quot;adp-100&amp;quot;/&amp;gt;&lt;br /&gt;
* 阶段 0：未初始化&lt;br /&gt;
* 第一阶段：加载中&lt;br /&gt;
* 第二阶段：加载完成&lt;br /&gt;
* 第三阶段：交互&lt;br /&gt;
* 第四阶段：已完成&lt;br /&gt;
&lt;br /&gt;
当&amp;lt;code&amp;gt;readyState&amp;lt;/code&amp;gt;达到4时，文本字符串已经到达并被设置在&amp;lt;code&amp;gt;responseText&amp;lt;/code&amp;gt;属性中。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
request.onreadystatechange = function()&lt;br /&gt;
{&lt;br /&gt;
    if ( request.readyState == 4 )&lt;br /&gt;
    {&lt;br /&gt;
        // request.responseText is set&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==例子==&lt;br /&gt;
下例首先创建Javascript函数&amp;lt;ref name=&amp;quot;adp-26&amp;quot;/&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /var/www/html&amp;lt;/code&amp;gt;&lt;br /&gt;
* 编辑文件&amp;lt;code&amp;gt;ajax_submit.js&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ajax_submit( element_id, submit_url )&lt;br /&gt;
{&lt;br /&gt;
    var request = new XMLHttpRequest();&lt;br /&gt;
    var completed_state = 4;&lt;br /&gt;
&lt;br /&gt;
    request.onreadystatechange = function()&lt;br /&gt;
    {&lt;br /&gt;
        if ( request.readyState == completed_state )&lt;br /&gt;
        {&lt;br /&gt;
            document.&lt;br /&gt;
                getElementById( element_id ).&lt;br /&gt;
                innerHTML =&lt;br /&gt;
                    request.responseText;&lt;br /&gt;
            request.open( &amp;quot;DELETE&amp;quot;, null );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    request.open( &amp;quot;GET&amp;quot;, submit_url );&lt;br /&gt;
    request.send( null );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 同一个目录下编辑文件&amp;lt;code&amp;gt;ajax.phtml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    echo &amp;#039;&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 同一个目录下编辑文件&amp;lt;code&amp;gt;ajax.html&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;script type=text/javascript src=ajax_submit.js&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=ajax_title&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;button onclick=&amp;quot;ajax_submit( &amp;#039;ajax_title&amp;#039;, &amp;#039;ajax.phtml&amp;#039; )&amp;quot;&amp;gt;&lt;br /&gt;
        Submit&lt;br /&gt;
    &amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 在浏览器中打开&amp;lt;code&amp;gt;http://localhost/ajax.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* 点击&amp;lt;code&amp;gt;Submit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CGI例子==&lt;br /&gt;
[[通用网关接口]] (CGI) 进程允许浏览器请求Web服务器执行已编译的计算机程序。{{efn|The web server may be configured to execute interpreted programs, also.&amp;lt;ref name=&amp;quot;apache_howto_cgi&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 | title=Apache Tutorial&lt;br /&gt;
 | url=https://httpd.apache.org/docs/2.4/howto/cgi.html&lt;br /&gt;
 | access-date=2023-04-10&lt;br /&gt;
 | archive-date=2021-11-15&lt;br /&gt;
 | archive-url=https://web.archive.org/web/20211115181448/https://httpd.apache.org/docs/2.4/howto/cgi.html&lt;br /&gt;
 | dead-url=no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
CGI &amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;的服务器组件是位于服务器上的可执行文件。操作系统将打开该文件并读取其机器指令。 &amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;协议要求可执行文件输出文本字符串。&lt;br /&gt;
&lt;br /&gt;
编译后的程序有两个文件：源代码和相应的可执行文件。&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /usr/lib/cgi-bin&amp;lt;/code&amp;gt;&lt;br /&gt;
* 编辑文件&amp;lt;code&amp;gt;ajax.c&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void main( void )&lt;br /&gt;
{&lt;br /&gt;
    /* CGI requires the first line to output: */&lt;br /&gt;
    printf( &amp;quot;Content-type: text/html\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    /* CGI requires the second line to output: */&lt;br /&gt;
    printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    printf( &amp;quot;&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;\n&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 编辑源文件产生可执行文件:&lt;br /&gt;
&amp;lt;code&amp;gt;cc ajax.c -o ajax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
或&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cc ajax.c -o ajax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CGI浏览器组件与PHP浏览器组件相同，只是&amp;lt;code&amp;gt;submit_url&amp;lt;/code&amp;gt;略有变化。 告诉Web服务器执行可执行文件的语法是&amp;lt;code&amp;gt;/cgi-bin/&amp;lt;/code&amp;gt;后跟文件名。为了安全起见，可执行文件必须驻留在[[chroot|chroot 监狱]]中。在本例中，监狱是目录&amp;lt;code&amp;gt;/usr/lib/cgi-bin/&amp;lt;/code&amp;gt;.{{efn|The web server may be configured to add other executable directories.&amp;lt;ref name=&amp;quot;apache_howto_cgi&amp;quot;/&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt; cd /var/www/html&amp;lt;/code&amp;gt;&lt;br /&gt;
* 编辑文件&amp;lt;code&amp;gt;ajax.html&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;script type=text/javascript src=ajax_submit.js&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=ajax_title&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;button onclick=&amp;quot;ajax_submit( &amp;#039;ajax_title&amp;#039;, &amp;#039;/cgi-bin/ajax&amp;#039; )&amp;quot;&amp;gt;&lt;br /&gt;
        Submit&lt;br /&gt;
    &amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 用浏览器打开&amp;lt;code&amp;gt;http://localhost/ajax.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* 点击&amp;lt;code&amp;gt;Submit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
* [[WebSocket]]&lt;br /&gt;
* [[表现层状态转换]] (REST)&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist|2}}&lt;br /&gt;
&lt;br /&gt;
==注释==&lt;br /&gt;
{{Notelist}}&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
{{wikibooks|XMLHttpRequest}}&lt;br /&gt;
&lt;br /&gt;
* [https://xhr.spec.whatwg.org/ XMLHttpRequest Living Standard] {{Wayback|url=https://xhr.spec.whatwg.org/ |date=20231108152833 }} by the [[WHATWG]]&lt;br /&gt;
* [https://www.w3.org/TR/XMLHttpRequest/ XMLHttpRequest Level 1] {{Wayback|url=https://www.w3.org/TR/XMLHttpRequest/ |date=20231113153254 }} draft by the [[W3C]]&lt;br /&gt;
&lt;br /&gt;
{{Internet Explorer}}&lt;br /&gt;
{{W3C Standards}}&lt;br /&gt;
{{Web interfaces}}&lt;br /&gt;
{{網頁技術與標準}}&lt;br /&gt;
{{Microsoft APIs}}&lt;br /&gt;
{{W3C规范和标准}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Xmlhttprequest}}&lt;br /&gt;
[[Category:XML]]&lt;br /&gt;
[[Category:微軟API]] &lt;br /&gt;
[[Category:JavaScript]]  &lt;br /&gt;
[[Category:网页标准]]&lt;br /&gt;
[[Category:2000年软件]]&lt;br /&gt;
[[Category:HTTP客户端]]&lt;br /&gt;
[[Category:AJAX]]&lt;/div&gt;</summary>
		<author><name>imported&gt;InternetArchiveBot</name></author>
	</entry>
</feed>