AJAX中的if(xmlhttp.readyState == 4&& xmlhttp.status == 200)未执行

时间:2014-06-05 09:27:10

标签: javascript jquery ajax

我在我的网页上尝试ajax。但它不起作用,因为if (xmlhttp.readyState==4 && xmlhttp.status==200)总是错误的。我已提醒xmlhttp.readyStatexmlhttp.status的值。 xmlhttp.open事件和4&事件的值分别为1和0。 xmlhttp.close事件分别为0。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
function captcha_check()
{
    var code = document.getElementById("captcha").value;
    var url = "http://www.opencaptcha.com/validate.php?img='.$captcha_name.'.jpgx&ans="+code;
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function() {
        alert(xmlhttp.readyState + " " + xmlhttp.status);
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
          document.getElementById("captcha_error").innerHTML=xmlhttp.responseText;
          return false;
        }
    }
    xmlhttp.open("GET","captcha_check.php?img=abc.jpg&ans="+code,true);
    xmlhttp.send();
}
</script>

问题可能是什么,如何解决它并使AJAX正常运行。提前谢谢。

4 个答案:

答案 0 :(得分:3)

正确的通话顺序是:

  • new XMLHttpRequest
  • xhr.open()
  • xhr.onreadystatechange = ...
  • xhr.send()

在某些浏览器中,调用.open会清除其上的所有事件处理程序。这样可以干净地重复使用相同的XHR对象,这可能会带来更高的内存效率(但如果您正确编写代码以使GC完成其工作,则无关紧要)

所以,只需在.open作业之前拨打onreadystatechange来电,就可以了。

答案 1 :(得分:1)

即使您的代码运行正常,如评论中所述,因为您已经包含的jQuery尝试:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
function captcha_check() {
  var code = document.getElementById("captcha").value;
  var url = "http://www.opencaptcha.com/validate.php?img='.$captcha_name.'.jpgx&ans="+code;
  jQuery.get("captcha_check.php?img=abc.jpg&ans="+code", function(data) {
    alert("Load was performed.");
    console.log(data);
  });
}
</script>

答案 2 :(得分:0)

这听起来好像是从浏览器中直接从文件系统加载的页面发出AJAX请求,而不是从Web服务器发出。由于您要发出GET请求,因此浏览器缓存也可能是个问题。尝试每次都向URL添加时间戳,以便URL是唯一的:

xmlhttp.open("GET", "captcha_check.php?img=abc.jpg&ans=" + code
    + "&__cachebuster__=" + new Date().getTime());

其次,您需要转义code变量以使其对查询字符串安全:

xmlhttp.open("GET", "captcha_check.php?img=abc.jpg&ans=" + escape(code)
    + "&__cachebuster__=" + new Date().getTime());

最后,请检查您的captcha_check.php文件中是否出现$_POST,因为这表示您应该发出POST请求,而不是GET请求。

如果:

  1. 您正在浏览器中直接从文件系统加载页面,AJAX请求将失败

  2. 您为code输入非查询字符串安全字符,然后您的网址无效,并且AJAX请求将失败

  3. captcha_check.php文件需要POST请求并发出GET请求,AJAX请求将失败。

答案 3 :(得分:0)

xmlhttp.open(“ GET”,“ captcha_check.php?img = abc.jpg&ans =” + code,true);

请检查文件路径,也许是错误的路径。