我想设置一个网页,通过AJAX调用从嵌入式Web服务器中采样数据。如何设置代码,以便一个请求不会与另一个请求重叠? 需要说明的是,我几乎没有JavaScript经验,而且有一个强烈的理由不使用任何大于10KB左右大小的外部库。
我想设置一个网页,通过AJAX调用从嵌入式Web服务器中采样数据。如何设置代码,以便一个请求不会与另一个请求重叠? 需要说明的是,我几乎没有JavaScript经验,而且有一个强烈的理由不使用任何大于10KB左右大小的外部库。
function autoUpdate()
{
var ajaxConnection = new Ext.data.Connection();
ajaxConnection.request(
{
method: 'GET',
url: '/web-service/',
success: function(response)
{
// Add your logic here for a successful AJAX response.
// ...
// ...
// Relaunch the autoUpdate() function in 5 seconds.
setTimeout(autoUpdate, 5000);
}
}
}
XMLHttpRequest
。setTimeout()
调用时经过的时间,并将其从延迟中减去。否则,在上面的例子中,间隔时间将随着网络延迟和处理Web服务逻辑的时间而变化。setTimeout
,无论成功与否。否则,第一次超时或错误时,您将停止获取更新。 - GrodriguezAJAX,尽管名字中带有“异步”一词,但并不一定是异步的。
这里是异步方法...
var req;
function ajax(method,url,payload,action)
{
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
req.onreadystatechange = action;
req.open(method, url, true);
req.send(payload);
}
else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req)
{
req.onreadystatechange = action;
req.open(method, url, true);
req.send(payload);
}
else
{
alert("Could not create ActiveXObject(Microsoft.XMLHTTP)");
}
}
}
...但这里有一个同步的等效物...
function sjax(method,url,payload,action)
{
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
req.open(method, url, false);
req.send(payload);
action();
}
else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req)
{
req.onreadystatechange = action;
req.open(method, url, false);
req.send(payload);
}
else
{
alert("Could not create ActiveXObject(Microsoft.XMLHTTP)");
}
}
}
... 这里是一个典型的操作...
function insertHtml(target)
{
var pageTarget = arguments[0];
if (req.readyState == 4) // 4 == "loaded"
{
if (req.status == 200) // 200 == "Ok"
{
if (req.responseText.indexOf("error") >= 0)
{
alert("Please report the following error...");
pretty = req.responseText.substring(req.responseText.indexOf("error"),1200);
pretty = pretty.substring(0,pretty.indexOf("\""));
alert(pretty + "\n\n" + req.responseText.substring(0,1200));
}
else
{
div = document.getElementById(pageTarget);
div.innerHTML = req.responseText;
dimOff();
}
}
else
{
alert("Could not retreive URL:\n" + req.statusText);
}
}
}
我建议您使用像jx.js这样的小型工具包(source)。您可以在这里找到它:http://www.openjs.com/scripts/jx/(压缩后不到1k)
设置请求:
jx.load('somepage.php', function(data){
alert(data); // Do what you want with the 'data' variable.
});
要在间隔时间内设置它,您可以使用 setInterval
和一个变量来存储当前是否正在发生请求 - 如果是,则我们什么也不做:
var activeRequest = false;
setInterval(function(){
if (!activeRequest) {
// Only runs if no request is currently occuring:
jx.load('somepage.php', function(data){
activeRequest = false;
alert(data); // Do what you want with the 'data' variable.
});
}
activeRequest = true;
}, 5000); // Every five seconds