我有以下通用的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,参数和文件),这些都没问题。 此功能以前在单独的项目中工作。
答案 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)
抱歉,问题很简单。我花了整整一个星期。
xmlhttp
与xmlHttp
不同。