所有现代浏览器有一个内置的XMLHttpRequest对象从服务器请求数据。
所有主要的浏览器都有一个内置的XML解析器来访问和操作XML。
XMLHttpRequest对象
XMLHttpRequest对象可用于从Web服务器请求数据。
XMLHttpRequest对象是a developers dream ,因为你可以:
- 更新网页无需重新加载页面
- 从服务器请求数据 - 在页面加载后,
- 从服务器接收数据 - 在页面加载后,
- 将数据发送到服务器 - 在后台
XMLHttpRequest的实例
当键入在下面的输入字段的字符,一个XMLHttpRequest被发送到服务器,以及一些名称建议返回(from the server) :
例
Start typing a name in the input field below:
Suggestions:
发送一个XMLHttpRequest
所有现代浏览器有一个内置的XMLHttpRequest对象。
使用它的一个共同JavaScript语法看起来像这样:
例
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
// Action to be performed when the
document is read;
}
};
xhttp.open("GET", " filename ", true);
xhttp.send();
试一试» 创建XMLHttpRequest对象
在上面的例子中的第一行创建一个XMLHttpRequest OBJET:
var xhttp = new XMLHttpRequest();
onreadystatechange事件
readyState属性持有了XMLHttpRequest的状态。
onreadystatechange事件被触发每次readyState的变化。
在一台服务器的请求,readyState的从0到4的变化:
0:请求未初始化
1:服务器连接建立
2:接收到的请求
3:请求处理
4:请求完成和响应准备就绪
在onreadystatechange属性,指定一个函数来执行当readyState变化:
xhttp.onreadystatechange = function()
当readyState为4和状态为200,则响应已准备就绪:
if (xhttp.readyState == 4 && xhttp.status == 200)
XMLHttpRequest的属性和方法
方法 | 描述 |
---|---|
new XMLHttpRequest() | 创建一个新的XMLHttpRequest对象 |
open( method, url, async ) | 指定请求的类型 method :请求的类型:GET或POST url :文件位置 async :真(asynchronous)或false (synchronous) |
send() | 发送一个请求给服务器(used for GET) |
send( string ) | 发送一个请求字符串到服务器(used for POST) |
onreadystatechange | 被调用的函数当readyState属性改变 |
readyState | 了XMLHttpRequest的状态 0:请求未初始化 1:服务器连接建立 2:接收到的请求 3:请求处理 4:请求完成和响应准备就绪 |
status | 200:OK 404:找不到页面 |
responseText | 响应数据作为串 |
responseXML | 响应数据为XML数据 |
跨域访问
出于安全原因,现代的浏览器不允许跨域访问。
这意味着这两个网页并尝试加载XML文件,必须位于同一服务器上。
在w3ii的示例位于w3ii域中的所有Open XML文件。
如果你想用上面的例子在自己的网页之一,您加载XML文件必须位于你自己的服务器上。
responseText属性
responseText属性返回响应作为一个字符串。
如果您想使用响应为文本字符串,请使用responseText属性:
responseXML属性
responseXML属性返回响应作为XML DOM对象。
如果您想使用响应作为XML DOM对象,请使用responseXML属性:
例
请求文件cd_catalog.xml和使用响应作为XML DOM对象:
xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
试一试» GET或POST?
GET是简单和较POST更快,并能在大多数情况下被使用。
然而,始终使用POST请求时:
- 缓存的文件不是一个选项(update a file or database on the server)
- 发送大量的数据到服务器(POST没有大小限制)
- 发送用户输入(which can contain unknown characters) ,POST是更强大和安全比GET
网址 - 上的文件服务器
该的URL参数open()方法,是一个地址到服务器上的文件:
xmlhttp.open("GET", "xmlhttp_info.txt", true);
该文件可以是任何类型的文件,如.txt和.xml或类似的.asp和.PHP(可发送回响应之前在服务器上执行的操作)服务器的脚本文件。
异步 - 真或假?
要异步发送请求,的async参数open()方法,已被设置为true:
xmlhttp.open("GET", "xmlhttp_info.txt", true);
发送异步请求是Web开发人员一个巨大的进步。 许多的服务器上执行的任务是非常耗时。
通过异步发送,JavaScript的不必等待服务器的响应,而是可以:
- 执行其他脚本在等待服务器响应
- 处理时的响应的响应是就绪
异步=真
当使用异步=真实,指定一个功能,当响应是onreadystatechange事件准备执行:
例
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("demo").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET", "xmlhttp_info.txt", true);
xmlhttp.send();
试一试» 异步= FALSE
要使用异步=假,更改第三个参数open()方法为false:
xmlhttp.open("GET", "xmlhttp_info.txt", false);
使用异步=虚假不建议,但对于一些小的请求,这可能是好的。
请记住,JavaScript就无法继续执行,直到服务器响应准备。 如果服务器太忙或太慢,应用程序将挂起或停止。
Note:当您使用异步=虚假的,不写一个函数的onreadystatechange -只要把代码后send()语句:
例
xmlhttp.open("GET", "xmlhttp_info.txt", false);
xmlhttp.send();
document.getElementById("demo").innerHTML = xmlhttp.responseText;
试一试» XML解析器
所有现代浏览器有一个内置的XML解析器。
XML文档对象模型(the XML DOM)含有大量的方法来访问和编辑XML。
然而,可被访问的XML文档之前,它必须被加载到一个XML DOM对象。
XML解析器可以读取明文,并转换成一个XML DOM对象。
解析文本字符串
这个例子解析文本字符串转换为XML DOM对象,并提取从中用JavaScript的信息:
例
<html>
<body>
<p id="demo"></p>
<script>
var text, parser,
xmlDoc;
text = "<bookstore><book>" +
"<title>Everyday
Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
试一试» 旧的浏览器(IE5 and IE6)
Internet Explorer中的旧版本(IE5 and IE6)不支持XMLHttpRequest对象。
为了处理IE5和IE6,检查浏览器是否支持XMLHttpRequest对象,否则创建的ActiveXObject:
例
if (window.XMLHttpRequest) {
// code for modern browsers
xmlhttp = new XMLHttpRequest();
}
else {
// code for old IE browsers
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
试一试» Internet Explorer中的旧版本(IE5 and IE6)不支持的DOMParser对象。
为了处理IE5和IE6,检查浏览器支持的DOMParser对象,否则创建的ActiveXObject:
例
if (window.DOMParser) {
// code for modern browsers
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
}
else {
// code for old IE browsers
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(text);
}
试一试» 更多示例
检索与报头信息getAllResponseHeaders()
检索资源的头信息(file) 。
检索特定的头信息与getResponseHeader()
检索资源的特定头信息(file) 。
检索一个ASP文件的内容
如何网页可以同时输入字段的用户类型字符的Web服务器通信。
从数据库中检索内容
如何网页可以从XMLHttpRequest对象的数据库获取信息。
检索XML文件的内容
创建一个XMLHttpRequest来检索XML文件中的数据,并在一个HTML表格中显示的数据。