第二个Javascript表单POST在Chrome中失败,适用于IE和FF

时间:2011-07-28 23:22:28

标签: javascript flash flex google-chrome

我正在通过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中运行的任何想法吗?

更新: 看来该表单未从Chrome中的DOM中删除。我不确定这是不是问题,但无论如何都应该删除。

我们也注意到,虽然Linux和Windows上的Chrome中的第二个POST没有通过,但它们在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);
}

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。在URL末尾添加随机数会导致Chrome多次运行POST。 Chrome中必须有一个“功能”,可防止多个POST到同一个网址。

以下是我改变的内容:

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

答案 1 :(得分:0)

确保弹出窗口阻止程序没有阻止第二次打开。我不久前遇到了类似的问题。