第二个Javascript表单POST在Chrome浏览器失败,在IE和FF工作

Second Javascript form POST fails in Chrome, works in IE and FF

本文关键字:IE 工作 FF 失败 浏览器 Javascript 表单 POST Chrome 第二个      更新时间:2023-09-26

我打开一个新的窗口通过javascript POST响应用户点击在flash应用程序。用户可能会关闭新窗口,并希望通过再次单击第一页上的按钮重新打开它。由于我必须将一些大参数传递给第二页,所以我必须执行POST, GET不起作用。到目前为止,我已经在Chrome, FF和IE中打开了第二个页面,并且第一次点击按钮时行为正确。然而,在Chrome(它适用于IE和FF)第二次点击按钮,POST被忽略,新窗口不打开。

这是我用来做POST的函数。我已经验证了它在Chrome中使用所有相同的参数和没有错误通知的form.submit()行,但是新窗口仍然没有打开。

function post_to_url(path, paramString) {
    var params = paramString.split("|");
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");
    for (var i=0; i<params.length; i++) {
        var hiddenField = document.createElement("input");
        var param = params[i].split(":");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", param[0]);
        hiddenField.setAttribute("value", param[1]);
        form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}

关于如何修改以使其在Chrome中工作的任何想法?

更新:它似乎没有从DOM在Chrome中删除表单。我不确定这是不是问题所在,但无论如何它都应该被删除。

我们还注意到,虽然第二篇文章在Chrome在Linux和Windows不能通过,他们在mac上。然而,即使在Mac上,表单也不会从DOM中删除。

另一个更新:像这样修改代码可以正确地从DOM中删除表单,但是它不能解决POST问题。

function post_to_url(path, paramString) {
    var postform = document.getElementById("postform");
    if (postform != null)
        document.body.removeChild(postform);
    var params = paramString.split("|");
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");
    form.id = "postform";
    for (var i=0; i<params.length; i++) {
        var hiddenField = document.createElement("input");
        var param = params[i].split(":");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", param[0]);
        hiddenField.setAttribute("value", param[1]);
        form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    form.submit();
    var postform = document.getElementById("postform"); 
    document.body.removeChild(postform);
}

我找到了一个解决方案。在URL的末尾添加一个随机数会导致Chrome多次运行POST。在Chrome中必须有一个"功能"来防止多个post到同一个URL。

以下是我修改的内容:

form.setAttribute("action", path + '?' + Math.random().toString());

确保弹出窗口阻止器没有阻止第二个打开。我之前也遇到过类似的问题