打开新窗口后,Javascript页面停止响应

时间:2014-06-09 16:24:26

标签: javascript

在我的Javascript代码中,我有一个无限的while循环点击一个按钮,从几个文本框中收集值并将它们发送到PHP脚本。我不知道如何做到这一点,但为PHP脚本打开一个新窗口。一切都在localhost上运行。所以我的代码看起来像这样:

 <body onload="generator();">
...
  function generator(){
  phpWindow = window.open("http://localhost/adressSaver.php", "", "width=200, height=100");
  while(true){
      document.getElementById("genRandom").click();
      var first = document.getElementById("first").value;
      var second = document.getElementById("second").value;
      phpWindow.location = "http://localhost/adressSaver.php?first=" + first + "&second=" + second;
      }
}

我假设使用这个,每个循环变量都会传递给PHP脚本。但不是那样,当我打开这个文档时,会创建一个新的PHP窗口,然后两个窗口都会继续加载而不做任何事情。我甚至试图取消循环并使其成为一次性操作,没有变化。 有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

在这种情况下,您必须使用setInterval,以便代码无限期阻止执行:

function generator() {
  phpWindow = window.open("http://localhost/adressSaver.php", "", "width=200, height=100");
  window.setInterval(function () {
      while(true) {
          document.getElementById("genRandom").click();
          var first = document.getElementById("first").value;
          var second = document.getElementById("second").value;
          phpWindow.location = "http://localhost/adressSaver.php?first=" + first +     "&second=" + second;
      }
}}, 10);

这将导致您的代码每10毫秒执行一次,您可以将其更改为您喜欢的任何内容。将其更改为0将导致代码无延迟地执行(尽管实际上有一个延迟,因为javascript不是多线程的)。

答案 1 :(得分:0)

这种情况正在发生,因为JavaScript和页面呈现只有一个线程。这意味着当你的循环处于活动状态时,不会发生任何事情:既不是任何其他JS(如鼠标点击等)也不是任何DOM节点渲染。
要修复它 - 只需添加一个&#34;休息&#34;为你的循环:

function generator(){
    phpWindow = window.open("http://localhost/adressSaver.php", "", "width=200, height=100");
    setInterval(function() {
        document.getElementById("genRandom").click();
        var first = document.getElementById("first").value;
        var second = document.getElementById("second").value;
        phpWindow.location = "http://localhost/adressSaver.php?first=" + first + "&second=" + second;
    }, 1000);
}

这将每秒执行一次代码。