Tha*_*sas 18 javascript xmlhttprequest httprequest wait
有没有办法在JavaScript中向HTTP服务器发送HTTP请求并等待服务器响应回复?我希望我的程序等到服务器回复,而不是执行此请求之后的任何其他命令.如果HTTP服务器关闭,我希望在超时之后重复HTTP请求,直到服务器回复,然后程序的执行可以正常继续.
有任何想法吗?
提前谢谢你,Thanasis
Jav*_*ome 30
有一个第三个参数来XmlHttpRequest的open(),其目的是表明你想要的请求通过异步(等处理通过响应onreadystatechange处理程序).
因此,如果您希望它是同步的(即等待答案),只需为第3个参数指定false.timeout在这种情况下,您可能还想为您的请求设置一个有限的属性,因为它会阻止页面直到接收.
这是同步和异步的一体化示例函数:
function httpRequest(address, reqType, asyncProc) {
var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
if (asyncProc) {
req.onreadystatechange = function() {
if (this.readyState == 4) {
asyncProc(this);
}
};
} else {
req.timeout = 4000; // Reduce default 2mn-like timeout to 4 s if synchronous
}
req.open(reqType, address, !(!asyncProc));
req.send();
return req;
}
Run Code Online (Sandbox Code Playgroud)
您可以这样称呼:
var req = httpRequest("http://example.com/aPageToTestForExistence.html", "HEAD"); // In this example you don't want to GET the full page contents
alert(req.status == 200 ? "found!" : "failed"); // We didn't provided an async proc so this will be executed after request completion only
Run Code Online (Sandbox Code Playgroud)
您可以执行同步请求.jQuery示例:
$(function() {
$.ajax({
async: false,
// other parameters
});
});
Run Code Online (Sandbox Code Playgroud)
你应该看一下jQuery的AJAX API.我强烈建议使用像jQuery这样的框架.手动做跨浏览器的ajax真是太痛苦了!
您可以使用XMLHttpRequest对象发送您的请求.发送请求后,您可以检查readyState属性以识别当前状态.readyState将具有以下不同的状态.
例如:
xmlhttp.open("GET","somepage.xml",true);
xmlhttp.onreadystatechange = checkData;
xmlhttp.send(null);
function checkData()
{
alert(xmlhttp.readyState);
}
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助
| 归档时间: |
|
| 查看次数: |
73010 次 |
| 最近记录: |