本机Ajax中的循环调用函数

时间:2016-02-08 07:59:07

标签: javascript ajax

这是我的原生ajax代码:

            function script_grabbed(str) {
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("numvalue").value = xmlhttp.responseText;
                    var result = document.getElementById("numvalue").value;
                    if (typeof result !== 'undefined'){             
                        alert('Data Found:' + result);
                        //start: new request data for #valdata
                        xmlhttp.open("POST", "inc.php?q="+str, true);
                        document.getElementById("valdata").value = xmlhttp.responseText;
                        xmlhttp.send(null);
                        var dataval = document.getElementById("valdata").value;
                        if (typeof dataval !== 'undefined'){    
                            alert('Data Bound:' + dataval);
                            //continue to call maps
                            script_dkill()
                            }
                        //end: new request data for #valdata
                        }
                    }
                }
                xmlhttp.open("POST", "inc_num.php?q="+str, true);
                xmlhttp.send(null);
            }

从代码中,让我解释一下:
我想从resultdataval获取数据/值。获取数据后,我执行script_dkill()函数。

但是,它会创建循环并且永远不会到达script_dkill 所以,问题是:如何到达script_dkill并执行它?

例如: script_dkill()的内容如下:

function script_dkill(){
   alert('Hallo, you call me!');
}

任何帮助,请...

1 个答案:

答案 0 :(得分:2)

您需要为第二个请求使用不同的XMLHttpRequest对象,因为您使用的是同一个对象,它会一次又一次地调用相同的onreadystatechange事件

function script_grabbed(str) {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("numvalue").value = xmlhttp.responseText;
      var result = document.getElementById("numvalue").value;
      if (typeof result !== 'undefined') {
        alert('Data Found:' + result);
        //start: new request data for #valdata

        var xmlhttp2 = new XMLHttpRequest();
        xmlhttp2.onreadystatechange = function() {
          if (xmlhttp2.readyState == 4 && xmlhttp2.status == 200) {
            document.getElementById("valdata").value = xmlhttp2.responseText;
            var dataval = document.getElementById("valdata").value;
            if (typeof dataval !== 'undefined') {
              alert('Data Bound:' + dataval);
              //continue to call maps
              script_dkill()
            }

          }
        }
        xmlhttp2.open("POST", "inc.php?q=" + str, true);
        xmlhttp2.send(null);

        //end: new request data for #valdata
      }
    }
  }
  xmlhttp.open("POST", "inc_num.php?q=" + str, true);
  xmlhttp.send(null);
}