Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax函数只在部分时间工作_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

Javascript 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() {

我使用的是以下Ajax函数格式:

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有关。我也会尝试你的其他建议。而且,这些功能(网站)在我的本地主机上运行得非常好。问题只发生在实时网站上。