我正在努力学习ajax,但我遇到了困难。
我有一个java servlet,它将从数据库中提供数据,我正在尝试创建一个简单的网页,每隔5秒不断要求更新一次,然后显示它而无需重新加载页面。我也不想在准备状态改变时这样做,而是每5秒做一次。
// xmlHttp = xmlHttpRequest object
function process() {
try {
if (xmlHttp.readyState==4 || xmlHttp.readyState==0) {
xmlHttp.open("GET",'localhost:8080',true);
//handleServerResponse(); // Get data from server. Not on ready state change, but always ?
setInterval('process()', 5000);
} else {
setTimeout('process()', 5000);
}
} catch (e) {
alert('main process did not work');
alert(e.toString());
}
}
我不确定如何才能做到这一点。有什么遗漏?
答案 0 :(得分:1)
以下步骤涉及从服务器获取数据。
仅当readystate为4且状态为200时。您对服务器的请求成功,您在request.responseHTML
或request.responseXML
收到回复。你用它来处理。
windown.onload = initialize;
function initialize()
{
setInterval(process, 5000);
}
var request ;
function process()
{
request = getAJAXREQUETOBJECT;
request.open("get","URL",true);
request.onreadystatechange = requestresponse;
request.send(true);
}
function requestresponse()
{
if(request.readystate == 4 && request.status == 200)
{
// do manipulation with request.responseHTML or request.responseXML
}
}
答案 1 :(得分:0)
我认为可以采取两种方式。见下文。我提供了一些简化以强调解决方案。
第一种方法。在setInterval()
process()
function process() {
url = "http://localhost:9090";
var xhr = new XMLHttpRequest();
xhr.open("GET",url,true);
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200) {
// handle response (xhr.responseText)
}
}
xhr.send();
}
//and then
setInterval(process, 5000);
另一个。在setTimeout()
process()
function process() {
url = "http://localhost:9090";
var xhr = new XMLHttpRequest();
xhr.open("GET",url,true);
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200) {
// handle response (xhr.responseText)
setTimeout(process, 5000);
}
}
xhr.send();
}
//and then
process();
setTimeout()
和setInterval
之间的区别在于,第一个将运行process()
一次,而后一个是循环。因此,如果您在interval()
内使用process()
,请求数量将呈指数级增长。