Javascript Ajax函数只在部分时间工作
我使用的是以下Ajax函数格式:Javascript Ajax函数只在部分时间工作,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我使用的是以下Ajax函数格式: var xmlhttp; function addAddress(str) { if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() {
var xmlhttp;
function addAddress(str)
{
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
//specific selection text
document.getElementById('info').innerHTML = xmlhttp.responseText;
}
}
var addAddress = "add";
xmlhttp.open("POST", "sys.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var queryString = "&addAddress=" + addAddress;
xmlhttp.send(queryString);
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
if (windows.ActiveXObject)
{
return new ActiveXObject("Micorsoft.XMLHTTP");
}
return null;
}
到目前为止,我所有的Ajax函数,如上面的函数,都运行得很好。但是,现在该功能只在某些时候起作用。现在,有时我必须单击onclick事件几次来执行函数,否则函数将挂起,然后在大约4分钟后执行
我测试了部分功能,发现问题在于:
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
alert(xmlhttp.status);
//specific selection text
document.getElementById('info').innerHTML = xmlhttp.responseText;
}
当函数工作时,我可以发出警报(xmlhttp.status)并获取200。但是,当它不工作时,警报框甚至不会触发。事实上,什么都没有发生,甚至一个错误也没有
这可能是服务器问题吗?我认为我的网站被黑客攻击了,但我不能接受Ajax功能没有正常执行的事实
最后,我在本地主机上没有遇到这个问题,它只发生在实时网站上
任何帮助都将不胜感激
谢谢首先,当您单击应该触发addAddress函数的按钮或控件时,请确认addAddress函数实际上正在被调用 只需在第一行中添加一个简单的警报,如下所示:
function addAddress(str)
{
alert('addAddress has been called!')
....
}
如果没有收到警报,请确保页面上没有阻止函数运行的javascript错误。例如,在firefox中,按CTRL+SHIFT+J可以查看错误控制台
如果这部分工作正常,请尝试将ajax请求的URL直接放到浏览器中,并以这种方式进行诊断
看起来您正在使用ajax请求此url:
sys.php&addAddress= (address goes here)
检查页面是否将直接加载到浏览器中。如果不是,问题不在于ajax请求,而在于sys.php页面本身——您可以深入了解它
希望有帮助 这不是我期望的答案,但我最终让我的web主机(GoDaddy)更换了服务器,这解决了问题。将近一年的时间里,我一直在用PHP运行IIS7。因为我从来没有遇到过任何问题,所以我只是继续使用那个服务器。在Ajax延迟问题之后,由于无法找到解决方案,我想我应该切换到Apache。改变后,一切又开始顺利进行 我想可能有一个软件更新,我没有得到通知。或者,我的网站可能受到DDoS攻击,这会降低我的Ajax请求的性能。最后,可能有人进入IIS并更改了设置。我不知道,我只知道服务器切换到Apache的那一刻,网站又开始正常运行了
谢谢大家的建议。您是否尝试过不将请求变为全局变量?Put
var-xmlhttp
在addAddress
函数中,查看发生了什么…您好,谢谢您的建议。我刚试过,但运气不好。我确实在if(window.XMLHttpRequest)中添加了一个警报(xmlhttp.status),发现当函数挂起几分钟后,警报返回0。此外,这些函数(网站)在我的本地主机上工作得非常好。此问题仅发生在live网站上。按照您在上述代码中设置的方式,只有当ajax请求完成(readyState==4
)并且服务器返回OK
状态(status==200
)时,才会触发警报。您可能希望尝试if
分支之外的alert(xmlhttp.status)
来查看您得到了什么。我希望服务器返回的不是200
,比如404
或500
。。。你也可以查看Firefox Firebug插件的网络面板来帮助诊断这些类型的问题。嗨,丹,谢谢你的建议。函数执行警报每次都有效,函数底部的警报(queryString)每次都有效。它看起来与readystate或status有关。我也会尝试你的其他建议。而且,这些功能(网站)在我的本地主机上运行得非常好。问题只发生在实时网站上。