我有一个非常简单的AJAX和PHP代码。在通过AJAX调用PHP时,它接收响应代码为0. PHP代码成功运行,但我无法得到响应。这个状态'0'表示什么,我该如何解决?
function confirmUser(id)
{
xmlhttp=GetXmlHttpObject();
regid = id;
if (xmlhttp==null) {
alert ("Browser does not support HTTP Request");
return;
}
var url="confirm.php";
url=url+"?id="+id;
url=url+"&a=confirm";
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$("#txtHint" + regid).text("Awaiting confirmation");
} else {
alert (xmlhttp.status); //this shows '0'
}
};
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
嗯,这是我使用的javascript。请原谅我是否应该添加更多内容。还告诉我我错过了什么。 感谢您的帮助
GetXmlHttpObject函数:
function GetXmlHttpObject()
{
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject) {
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
答案 0 :(得分:3)
过去使用XMLHttpRequests时,我发现通常会为本地处理的文件返回状态0。当我看到这个问题时,我有点狩猎,并在以下页面找到了确认:
答案 1 :(得分:2)
以下是适用于您的readyState代码。
0. Uninitialized
1. Set up, but not sent
2. Sent
3. In flight
4. Complete
(资料来源:http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-Ready-State-Codes/)
你是否经常处于readyState为0?如果是这样,这意味着您的请求尚未发送,尽管我可以在您的示例中看到一行代码“xmlhttp.send(null)”...
我预测你在调用send之前会得到一个0,但之后会有一个不同的状态代码。如果等一下会发生什么?
答案 2 :(得分:1)
我知道人们可能不想听到它,但这正是JS框架的用途。当您可以通过jQuery进行简单的AJAX调用时,为什么要混淆自定义AJAX调用的各种浏览器倾向和灾难。
基本上,你正在重新发明轮子,无缘无故。让你的php返回JSON数据,并在成功代码中嵌入一个变量,如果你需要测试它。
<script src="jquery.js"></script>
<script>
$.get("myphp.php", { id : "yes", blah : "stuff" }, function(data) {
if (data.success == 1) {
alert("got data");
} else {
alert("didn't get data");
}
},"json");
</script>
Boom,你现在有了跨浏览器的AJAX。
答案 3 :(得分:0)
如果您正在请求HTTPS资源并且握手失败(例如证书无效),则会发生这种情况。特别是,如果您从浏览器外部使用XML请求对象,则错误可能不明显。