状态永远不会达到4

时间:2015-06-03 19:45:49

标签: javascript php

在下面的代码中,我尝试将一些数据发布到表中,然后从表中检索几条记录。出于测试目的,我只在php中包含一个虚拟查询,它返回一个有效的xml。

但Javascript readystate只能达到readystate 1(两次)。由于php似乎工作正常,我怀疑我已经错误地编写了javascript脚本。是"请求"是否存在问题?变量?



$(document).ready(function() {
  $('form').submit(function(event) { //Trigger on form submit
    $('#name + .throw_error').empty(); //Clear the messages first

    var name = $('input[name=name]').val();
    var request = !window.XMLHttpRequest ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
    request.onreadystatechange = function() {

      if (request.readyState == 4 && request.status == 200) {
        var xml = request.responseXML;
        var dynamiclist = '';
        document.getElementById("myLink").innerHTML = '';
        var posts = xml.documentElement.getElementsByTagName("post");
        for (var i = 0; i < posts.length; i++) {
          var Msg = posts[i].getAttribute("Msg");
          alert("test");
          var dynamiclist = dynamiclist + '<article class="middleContent"><header><h2><a href="#" title="Post">' + Msg + '</a></h2></header> </article>';
          document.getElementById("myLink").innerHTML = dynamiclist;
        };
      };
    };
    request.open('POST', 'process.php', true);
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.send('name=' + name);
  });
});
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

在这里使用jQuery是有意义的。

简单的解决方案很可能只是简单地删除request.open()中的最后一个“true”,这使得请求成为异步的,非阻塞的(无论如何它应该是真的应该)。 MDN还在onreadystatechange上声明你不应该将它用于同步请求(也就是具有“true”作为open()的第三个参数的请求)

来源:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

答案 1 :(得分:0)

尝试阻止触发默认表单事件:

$('form').submit(function(event) { event.preventDefault();

这可以防止表单元素重新加载浏览器窗口。