document.forms.submit挂起了我的页面

时间:2015-08-20 15:37:44

标签: javascript php html forms

我正在创建一个帮助操作SQL表的网站。目前,我希望能够重新加载我的页面,但有一些新的变量。我这样做的方法是制作一个带有一些隐藏的textareas的表单(称为rerouter)和一个只是当前页面的动作(在这个例子中," connect.php")。像这样:

    <form action='connect.php' method='post' id='rerouter'>
        <input type='hidden' name='foo' id='foo'></input>
        <input type='hidden' name='bar' id='bar'></input>
        <input type='hidden' name='foobar' id='foobar'></input>
    </form>

当需要重新加载页面时,我使用我想要的新值填充这些textareas,然后我提交表单,就像这样(getRequest()调用另一个只创建SQL字符串的PHP文件执行它。我只是把它包含在这里,以显示在重新路由过程之前仍有执行的逻辑):

    ...
    getRequest(str, succ, err);

    document.getElementById('foo').value = fooText;
    document.getElementById('foo').value = barTest;
    document.getElementById('foobar').value = foobarText;
    document.forms['rerouter'].submit();

这很有效,除非整个页面冻结。解冻它的唯一方法是重新加载页面,然后它会提示你&#34;哦,快照&#34;您需要重新加载的错误(在Chrome中)。 getRequest()仍然正常,但代码挂起后。我没有找到一种方法来一致地重现问题,除了一遍又一遍地调用这个函数,直到它最终失败,但如果我发现一个模式,我会告诉你所有的通知。另外,我无法访问jQuery。

解决方案:@HaukurHaf指出我不稳定地使用异步AJAX调用。有时,当调用forms.submit()时,getRequest()调用的PHP还没有完成。我移动了一些代码,所以我的主要功能如下:

            ...
    document.getElementById('foo').value = fooText;
    document.getElementById('foo').value = barTest;
    document.getElementById('foobar').value = foobarText;

    getRequest(str, succ, err);

我的succ函数如下:

    function succ() {
        document.forms['rerouter'].submit();
    }

(以前它是空的)。现在表格不会提交,直到我们完全确定PHP已经完成执行。

1 个答案:

答案 0 :(得分:2)

getRequest()做什么?它是在进行异步AJAX调用吗?

这基本上意味着getRequest()方法并不总是完全运行,因为浏览器会立即尝试提交表单。这也可能导致您描述的行为。正确的方法是让getRequest()接受一个请求完成后执行的回调函数。然后应该将表单提交代码移动到该回调函数中。