PHP永远不会在ajax中返回readyState 4或status 200

时间:2010-12-14 10:16:35

标签: php javascript ajax readystate

我有以下通用的Ajax函数:

//run post request
function ajaxPost (divid, parameters, file) {

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  } else {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function() {
    alert ("ok")
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      alert ("ready");
      alert (xmlhttp.responseText);
    divid.innerHTML=xmlhttp.responseText;
    }
  }

  xmlhttp.open("POST", file,true);

  //Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", parameters.length);
xmlhttp.setRequestHeader("Connection", "close");



xmlhttp.send(parameters);
}

问题在于此部分无法按预期工作:

xmlhttp.onreadystatechange=function() {
    alert ("ok")
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      alert ("ready");
      alert (xmlhttp.responseText);
    divid.innerHTML=xmlhttp.responseText;
    }
  }

在浏览器中,我得到了多次“ok”警报,但是if语句中的语句永远不会触发。我认为这意味着php正在返回状态更新但由于某种原因永远不会返回准备好的代码。怎么会发生 - 我不知道。

有谁能告诉我为什么我不接受准备好的代码?

php本身不是问题:

<?php

echo "new";

?>

我测试了功能输入(divid,参数和文件),这些都没问题。 此功能以前在单独的项目中工作。

4 个答案:

答案 0 :(得分:1)

xmlhttp.open("POST", file,true);

文件是URL吗?
尝试从该URL回显。

答案 1 :(得分:0)

我猜测你的服务器没有返回有效的200响应,因此if语句xmlhttp.readyState == 4 && xmlhttp.status == 200永远不会等同于true。

尝试使用Firebug查看正在发出的请求(如果有)以及您收到的回复。如果您不使用Firefox,请尝试使用Charles等代理工具。

除此之外,我强烈建议使用稳定的开源Javascript库,例如jQuery。这包含内置的AJAX代码(以及其他内容),这些代码都经过严格测试。这不仅可以节省您的时间,还可以消除您自己代码中出现错误的可能性,例如,

$.get('url.php', function(data) {
    // 'data' is responseText
});

答案 2 :(得分:0)

xmlhttp.readyState&amp;&amp; xmlhttp.status取决于所使用的浏览器,而不是PHP脚本。最糟糕的情况是,PHP脚本可能不会重新生成Status 200,如果发生这种情况,则表示您的脚本中有错误(有时会导致Status 500)或服务器返回者404 。 在任何情况下,尝试直接访问url,或查看firebug日志窗口,它可能更容易调试。

答案 3 :(得分:-1)

抱歉,问题很简单。我花了整整一个星期。

xmlhttpxmlHttp不同。