Ajax函数仅适用于部分时间

时间:2012-11-02 23:14:05

标签: javascript ajax xmlhttprequest

我使用以下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功能没有正常执行。

最后,我在本地主机上没有遇到这个问题,它只发生在实时网站上。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

首先确认当您单击应触发它的按钮或控件时,实际上正在调用addAddress函数。

在第一行中只是一个简单的警报就像这样:

function addAddress(str)
{
    alert('addAddress has been called!')
    ....
}

如果您没有收到警报,请确保页面上没有阻止该功能运行的javascript错误。在Firefox中,按CTRL + SHIFT + J以查看错误控制台。

如果该部分正在运行,请尝试将ajax请求的URL直接放入浏览器并以此方式进行诊断。

看起来您正在使用ajax:

请求此网址
sys.php&addAddress= (address goes here)

检查页面是否会直接在浏览器中加载。如果没有,问题不是ajax请求,而是sys.php页面本身的问题 - 然后你可以深入研究。

希望有所帮助!

答案 1 :(得分:0)

这不是我期待的答案,但我最终让我的网络主机(GoDaddy)更改服务器,这解决了问题。差不多一年,我用PHP运行IIS7。由于我从未遇到任何问题,我只是继续使用该服务器。在Ajax延迟问题并且无法找到解决方案之后,我想我会切换到Apache。改变之后,一切都开始顺利运行了。

我想也许有一个我没有得到通知的软件更新。或者,也许我的网站遭遇了DDoS,这降低了我的Ajax请求的性能。最后,也许有人进入IIS并更改了设置。我不知道,我所知道的是服务器转换到Apache的那一刻是网站再次正常运行的时候。

感谢大家的建议。