我有一个自定义网络服务器,以及一些已经工作了大概18个月或更长时间的内容。这段时间没有触及过代码。但是,我现在发现一个依赖于Ajax的功能已不再适用。问题出在浏览器端。遗憾的是,Ajax代码是使用谷歌发现的,即使我定制它,我也没有真正理解它,但它已经工作到过去6个月左右的某个时间。现在它已经不再有效了,我有点迷失了......
代码的作用非常简单。我的HTML表单是一个选项卡控件。其中一个选项卡用于显示错误消息。 Ajax代码发送" \ ATCStatus.txt"的GET请求。大约每秒一次。服务器响应:
HTTP/1.1
Server: arduino
Content-Type: text/plain
#ATCErrorFlag#
其中#ATCErrorFlag#被wither" true"取代或"假"。如果" false"归来,没有任何反应。如果" true"返回,然后Ajax代码发送请求" \ ATCErrorPage.htm",切换到错误选项卡,并显示错误消息。
服务器接收请求,处理它们并发送正确的响应,但是Ajax代码就像没有收到任何响应一样,我无法弄清楚原因。
这里的任何人都知道足够的Ajax有线索吗?
这是Ajax代码:
setInterval(PollATCError, 1000);
function PollATCError()
{
var xhr;
if (window.XMLHttpRequest)
xhr = new XMLHttpRequest();
else if (window.ActiveXObject)
xhr = new ActiveXObject("Msxml2.XMLHTTP");
else
throw new Error("Ajax is not supported by your browser");
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
clearTimeout(xhrTimeout);
var response = xhr.responseText;
if (response == "false") {
// Do nothing
} else if (response == "true") {
// else, throw up Error Page
window.location.replace('ATCErrorPage.htm');
//document.getElementById("tab4event").click();
}
}
}
xhr.open('GET', 'ATCStatus.txt', true);
xhr.send(null);
var xhrTimeout = setTimeout("ajaxTimeout();", 900);
function ajaxTimeout()
{
xhr.abort();
// Note that at this point you could try to send a notification to the
// server that things failed, using the same xhr object.
}
}
似乎特别奇怪的是,我似乎没有得到任何状态更改通知。如果我将状态更改处理程序的第一行设置为alert(),则警报永远不会出现。请求确实发送到服务器,正确的响应被发送回客户端,但似乎从未被XMLHttpRequest对象看到。即使是900毫秒的超时也不会发生。
这曾经非常好用!出了什么问题?我怎样才能深究这一点?
此致 Ray L。