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



我在页面上尝试ajax。但它不起作用,因为if (xmlhttp.readyState==4 && xmlhttp.status==200)总是错误的。我已经提醒了xmlhttp.readyStatexmlhttp.status的值。对于CCD_ 4事件和4&对于CCD_ 5事件分别为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发挥作用。提前谢谢。

正确的调用顺序是:

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

在某些浏览器中,调用.open会清除其上的任何事件处理程序。这允许对同一XHR对象进行干净的重用,这被认为是更高效的内存(但如果你正确地编码以让GC完成它的工作,那也没关系(

所以,只需将.open调用放在onreadystatechange分配之前,就可以开始了。

即使您的代码运行得很好,正如注释中所提到的,因为您已经包含了jQuery try:

<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>

这听起来就像是从浏览器中直接从文件系统加载的页面而不是从Web服务器发出AJAX请求。由于您正在发出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输入了非查询字符串安全字符,然后您得到了一个无效的URL,AJAX请求将使失败

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

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

请检查文件路径,可能是错误的路径。

最新更新