3

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

4 回答 4

3

过去使用 XMLHttpRequests 时,我发现本地处理的文件通常返回状态 0。当我看到这个问题时,我进行了一番搜寻,并在以下页面上找到了对此的确认:

于 2010-04-23T12:16:20.580 回答
2

这是为您准备的就绪状态代码。

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/

你是否经常被困在 0 的 readyState 上?如果是这样,则表示您的请求尚未发送,尽管我可以在您的示例“xmlhttp.send(null)”中看到一行代码...

我预测你会在调用 send 之前得到一个 0,但之后会得到一个不同的状态码。如果你稍等片刻会发生什么?

于 2010-04-23T10:37:11.630 回答
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>

繁荣,您现在拥有跨浏览器的 AJAX。

于 2010-04-24T01:05:12.433 回答
0

如果您正在请求 HTTPS 资源并且握手失败(例如无效证书),则可能会发生这种情况。特别是,如果您从浏览器外部使用 XML 请求对象,错误可能并不明显。

于 2012-05-22T15:01:29.407 回答