1

我有以下通用 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";

?>

我已经测试了函数输入(除法,参数和文件),这些都可以。此功能以前在一个单独的项目中工作。

4

4 回答 4

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

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

于 2012-10-10T07:09:36.290 回答
0

xmlhttp.readyState&&xmlhttp.status取决于使用的浏览器,而不是 PHP 脚本。最坏的情况是,PHP 脚本可能不会返回Status 200,如果发生这种情况意味着您的脚本中有错误(有时这会导致Status 500)或服务器返回 a 404。无论如何,尝试直接访问 url,或者查看 firebug 日志窗口,可能会更容易调试。

于 2010-12-14T11:02:24.313 回答
0

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

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

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

$.get('url.php', function(data) {
    // 'data' is responseText
});
于 2010-12-14T10:54:29.717 回答
-1

抱歉,问题很简单。我花了整整一周的时间。

xmlhttp不一样xmlHttp

于 2012-12-07T13:04:17.380 回答