将AJAX HTTP响应代码接收为0

时间:2010-04-23 10:04:49

标签: ajax httpresponse

我有一个非常简单的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;
}

4 个答案:

答案 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请求对象,则错误可能不明显。