0

我正在使用以下 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; 
 }

当函数工作时,我可以 alert(xmlhttp.status) 并得到 200。但是,当它不工作时,警报框甚至不会触发。事实上,什么都没有发生,甚至没有错误。

这可能是服务器问题吗?我有点想我的网站被黑了,但我找不到任何问题可以接受 Ajax 函数没有正确执行。

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

任何帮助将不胜感激。

谢谢

4

2 回答 2

1

首先确认当您单击应该触发它的按钮或控件时实际调用了 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 页面本身的问题 - 然后您可以深入研究。

希望有帮助!

于 2012-11-02T23:31:25.300 回答
0

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

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

感谢大家的建议。

于 2012-11-03T20:20:46.373 回答