2014-02-12 72 views
1

你好我使用Ajax调用获取状态为0

alert("4"); 
    req.onreadystatechange=function() 
    { 
    alert("5"); 
    if (req.readyState==4 && req.status==200) 
    { 
    xmlDoc=req.responseXML; 
    alert("xml doc received"+xmlDoc); 
    txt=""; 
    x=xmlDoc.getElementsByTagName("FIRSTNAME"); 
    y=xmlDoc.getElementsByTagName("LASTNAME"); 
    alert("Response achieved"+x); 
    } 
    else 
    { 
    alert("Error!!! --> req.readyState "+req.readyState+" Error !!! ---> req.status "+req.status); 
    } 
    } 


req.open("POST",url,true); 
alert("6"); 
req.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
req.send(parameters); 

我得到的req.readyState为4和req.status为0 下面的代码可能是什么问题

我我在本地的apache服务器上托管一个文件。 请回复。

+0

不是原因,但:当处理ajax(或其他异步)时,*不要*使用'alert'。 'alert'停止JavaScript解释器,并且可以(取决于您使用的浏览器)以奇怪的方式与异步代码交互。使用您的浏览器的调试器,它不仅为此设计,而且为您提供*显着的*更多信息。或者最糟糕的是,使用'console.log'。但是,调试器又是专为帮助您了解代码的运行方式而设计的,它允许您检查变量等。 –

+0

[HTML5 Post Request Body]的可能重复(http://stackoverflow.com/questions/21725580/html5 -post请求体) – Quentin

回答

3

通常的原因是您试图进行跨域呼叫并被Same Origin Policy阻止,该阻止禁止交叉源ajax呼叫。您应该在开发者控制台或网络标签中收到错误消息,告诉您该请求已被阻止。

如果您控制有问题的服务器,或者您可以联系相关人员,您可以通过Cross-Origin Resource Sharing从您的原始设备访问。只要他们将您的出处列入白名单,即可与所有现代浏览器一起使用,尽管在IE8和IE9中不得不使用微软的特殊XDomainRequest对象而不是XMLHttpRequest(截止IE10,微软终于加入了该派对)。

或者,你可能会看到,如果你想与支持JSONP使用的服务器(不JSON混淆),但因为你的要求是一个POST和JSONP本质上是一种GET操作,他们可能不会。