Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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
PHP在ajax中从不返回readyState 4或状态200_Php_Javascript_Ajax_Readystate - Fatal编程技术网

PHP在ajax中从不返回readyState 4或状态200

PHP在ajax中从不返回readyState 4或状态200,php,javascript,ajax,readystate,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("M

我有以下通用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、参数和文件,这些都还可以。
此函数以前在一个单独的项目中工作。

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

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

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

$.get('url.php', function(data) {
    // 'data' is responseText
});
xmlhttp.readyState&&xmlhttp.status取决于使用的浏览器,而不是PHP脚本。最坏的情况是,PHP脚本可能不会重新返回状态200,如果发生这种情况,则意味着您的脚本中存在错误,有时会导致状态500或服务器返回404。 在任何情况下,尝试直接访问url,或者查看firebug日志窗口,这可能更容易调试

xmlhttp.open("POST", file,true);
文件的URL是否正确?
尝试从该URL回显。

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


xmlhttp与xmlhttp不同。

所以它只会持续到状态3?检查readyState的不同值…@Felix King刚刚测试过。它到达状态4,但状态在发生后立即返回404。同时检查状态。也许你会得到404。编辑:好了。@YsoL8:这就是你的问题。xmlhttp.readyState==4&&xmlhttp.status==200计算结果为false。也许你的网址错了?或者你的服务器设置不正确。我现在知道我得到了404。我以前从未遇到过这个问题,我不知道如何解决它。请将此作为评论写下来。