jQuery打开新标签页并传递一些POST值

34

我如何在新窗口中打开一个PHP页面并传递一些POST变量?我正在使用jQuery。

谢谢。

3个回答

51

我建议在你的HTML中创建一个不可见的表单,就像这样:

<form id="invisible_form" action="new_window.php" method="post" target="_blank">
  <input id="new_window_parameter_1" name="parameter" type="hidden" value="default">
</form>

然后通过jQuery提交它:

$('#new_window_parameter_1').val('value');
$('#invisible_form').submit();

1
你也可以使用 JavaScript 创建表单,将其附加到 body 上,然后再提交,以避免在 DOM 中存在它。 - sstauross
3
有没有不引入表单的方法来实现它? - Ridhuvarshan

32

以下是一个示例,演示如何通过POST方式提交一个隐藏的表单:

function submit_post_via_hidden_form(url, params) {
    var f = $("<form target='_blank' method='POST' style='display:none;'></form>").attr({
        action: url
    }).appendTo(document.body);

    for (var i in params) {
        if (params.hasOwnProperty(i)) {
            $('<input type="hidden" />').attr({
                name: i,
                value: params[i]
            }).appendTo(f);
        }
    }

    f.submit();

    f.remove();
}

然后使用它:

submit_post_via_hidden_form(
    'some link',
    {
        val1: val1,
        val2: val2
    }
);

顺便说一下,现在我使用这个插件来提交一个隐藏的表单。不确定为什么,可能是因为某些特定浏览器的问题。 - Andron

3
简易数组兼容版本:
    var url = 'myurl.html';
    var params = {
        inputId: 'somevalue',
        itemArray: ['as','a','example']
    };

    var f = $("<form target='_blank' method='POST' style='display:none;'></form>").attr({
        action: url
    }).appendTo(document.body);

    for (var i in params) {
        if (params.hasOwnProperty(i)) {
            if($.isArray(params[i])) {
                for (var j in params[i]) {
                    $('<input type="hidden" />').attr({
                        name: i + '[]',
                        value: params[i][j]
                    }).appendTo(f);
                }
            } else {
                $('<input type="hidden" />').attr({
                    name: i,
                    value: params[i]
                }).appendTo(f);
            }
        }
    }

    f.submit();
    f.remove();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接