2010-04-23 77 views
3

我有一个非常简单的AJAX和PHP代码。通过AJAX调用PHP时,它将接收到的响应代码设置为0. PHP代码已成功运行,但无法获得响应。这个状态'0'表示什么,我该如何解决这个问题?接收AJAX HTTP响应代码为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; 
} 
+1

真的很难调试你看不到的代码。告诉我们是什么导致了错误。 – Quentin 2010-04-23 10:07:22

+0

请把你的代码放在这里,以便一个人能够帮助你。 – Salil 2010-04-23 10:07:57

+0

我已经添加了代码。只是我看到问题的一部分... – shyam 2010-04-23 10:32:11

回答

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。

+0

感谢您的回复。我会尝试一下。 – shyam 2010-04-24 06:54:07

+0

可以发布一个链接,更详细的使用ajax thru jquery吗?将是真正有用的.. – shyam 2010-04-24 07:52:47

+0

其实我的例子是一个工作的例子。访问http://www.jquery.com获取更多示例,那里有很多例子。我发布的示例的基础知识是$ .get()用于GET或$ .post()用于发布请求。第一个参数是要加载的文件名,该文件的内容将填充定义的回调函数的数据变量。上面的例子是,如果返回文件将传递JSON,但是如果你忽略了“json”,那么它将全部返回文档的文本。 这是来自IBM的一个doc - http://www.ibm.com/developerworks/library/x-ajaxjquery.html。 – 2010-04-26 22:21:10

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/

你得到的0 readyState的不断坚持?如果是这样,这意味着你的请求没有被发送,虽然我可以在你的例子“xmlhttp.send(null)”中看到一行代码... ...

我会预测你会得到一个0之前你打电话发送,但在那之后有一个不同的状态码。如果你稍等一下会发生什么?

+1

那么,我只有一次状态为0,即在最后;它应该是200. – shyam 2010-04-23 10:43:32

+0

你是在谈论readyState还是Status?状态应该是200,当请求完成时,readyState是4.我建议使用Firebug来跟踪请求 - 它将帮助你诊断任何问题,因为它会告诉你AJAX请求和任何对“Net “ 标签。 – Fenton 2010-04-23 10:49:15

+0

我正在谈论状态。 readyState当然是4。 让我试试萤火虫。 – shyam 2010-04-23 10:52:52

0

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

相关问题