【问题标题】:Receiving AJAX HTTP Response Code as 0接收 AJAX HTTP 响应代码为 0
【发布时间】:2011-02-11 11:10:06
【问题描述】:

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

【问题讨论】:

  • 看不到的代码真的很难调试。向我们展示导致错误的原因。
  • 请把您的代码放在这里,以便能够帮助您。
  • 我现在已经添加了代码。只是我看到问题的部分......
  • 这可能意味着多种情况。请看这个答案:stackoverflow.com/a/14507670/700206

标签: ajax httpresponse


【解决方案1】:

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

【讨论】:

    【解决方案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/

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

    我预计您会在调用 send 之前得到 0,但之后会得到不同的状态码。稍等片刻会怎样?

    【讨论】:

    • 好吧,我只有一次状态为 0,即最后;应该是 200 的地方。
    • 你说的是readyState还是Status?当请求完成时,状态应该为 200,readyState 为 4。我建议使用 Firebug 来跟踪请求 - 它会帮助您诊断任何问题,因为它会向您显示 AJAX 请求和“网络”上的任何响应" 选项卡。
    • 我说的是状态。 readyState 当然是 4。让我试试 firebug。
    • 您能否展示“GetXmlHttpObject()”方法,因为其中可能存在问题 - 它至少可以让我重新创建您的代码来查看问题。
    • 也许重新设计你的例子来使用这样的东西......w3schools.com/Ajax/ajax_database.asp
    【解决方案3】:

    我知道人们可能不想听到它,但这正是 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。

    【讨论】:

    • 您能否发布一个链接,其中包含有关通过 jquery 使用 ajax 的更多详细信息?会很有帮助的..
    • 其实我的例子是一个有效的例子。访问jquery.com 获取更多示例,那里有很多。我发布的示例的基础是 $.get() 用于 GET 或 $.post() 用于发布请求。第一个参数是您正在加载的文件名,该文件的内容将填充定义的回调函数的数据变量。上面的例子是如果返回文件将传递 JSON,但如果你省略了“json”,那么它将返回完整的文档文本。这是来自 IBM 的文档 - ibm.com/developerworks/library/x-ajaxjquery.html
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 2014-10-29
      • 2018-09-11
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多