使用 window.location.href 传递发布数据

IT技术 javascript jquery
2021-01-30 07:51:56

使用 window.location.href 时,我想将 POST 数据传递到我打开的新页面。这可以使用 JavaScript 和 jQuery 吗?

6个回答

使用window.location.href它不可能发送 POST 请求。

您需要做的是设置一个form带有数据字段标签action,将表单属性设置为 URL,将method属性设置为 POST,然后调用标签submit上的方法form

一种形式是在 jQueryUI 对话框中 - 所以我不能只包含它们。
2021-03-21 07:51:56
@Brian:你不能把所有东西都放在一起form,这样所有东西都会自动一起发送吗?
2021-03-25 07:51:56
取出它们的所有值,动态构建一个包含所有三个表单中的所有字段的表单,然后提交该表单。表格可以是不可见的。不要使用 JQuery AJAX 方法,使用$("#myForm").submit(). 表单 - 将不可见,仅用于从您的客户端代码提交值,而不是用户输入 - 将永远不会显示或以其他方式使用,并且页面将被刷新。
2021-03-28 07:51:56
我有来自 3 个不同表单的数据,我试图将所有 3 个表单发送到同一页面,所以我一直在尝试使用 jQuery 序列化表单并以其他方式发送它们
2021-04-03 07:51:56

在 HTML 中添加一个表单,如下所示:

<form style="display: none" action="/the/url" method="POST" id="form">
  <input type="hidden" id="var1" name="var1" value=""/>
  <input type="hidden" id="var2" name="var2" value=""/>
</form>

并使用 JQuery 来填充这些值(当然你也可以使用 javascript 来做类似的事情)

$("#var1").val(value1);
$("#var2").val(value2);

然后最后提交表单

$("#form").submit();

在服务器端,您应该能够通过检查var1获取发送的数据var2,如何执行此操作取决于您使用的服务器端语言。

当我这样做时,我让我的浏览器重定向到域/未定义。我究竟做错了什么?
2021-04-02 07:51:56

正如其他答案中所说,无法使用 window.location.href 发出 POST 请求,为此您可以创建一个表单并立即提交。

您可以使用此功能:

function postForm(path, params, method) {
    method = method || 'post';

    var form = document.createElement('form');
    form.setAttribute('method', method);
    form.setAttribute('action', path);

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            var hiddenField = document.createElement('input');
            hiddenField.setAttribute('type', 'hidden');
            hiddenField.setAttribute('name', key);
            hiddenField.setAttribute('value', params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});

https://stackoverflow.com/a/133997/2965158

很好的答案,谢谢。但是我发现了一个重复值的问题,有时需要像id=2&id=5. 我已经修改了您的代码,以便检查 params[key].constructor !== Array。如果是这样,我将这些非数组值转换为数组(具有单个元素),现在所有键都有一个数组值,并且我会循环访问这些数组。这允许我在参数中(在这种情况下我将它们作为数组输入)和表单内有重复的值。
2021-03-15 07:51:56

使用这个文件:“jquery.redirect.js”

$("#btn_id").click(function(){
    $.redirect(http://localhost/test/test1.php,
        {
            user_name: "khan",
            city : "Meerut",
            country : "country"
        });
    });
});

https://github.com/mgalante/jquery.redirect

简短的回答:没有。window.location.href无法传递 POST 数据。

更令人满意的答案:您可以使用此功能克隆所有表单数据并提交。

var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
//   so that you can differentiate between forms when
//   processing the data server-side.
submitMe.importFields = function(form){
    for(k in form.elements){
        if(input = form.elements[k]){
            if(input.type!="submit"&&
                     (input.nodeName=="INPUT"
                    ||input.nodeName=="TEXTAREA"
                    ||input.nodeName=="BUTTON"
                    ||input.nodeName=="SELECT")
                     ){
                var output = input.cloneNode(true);
                output.name = form.name + nameJoiner + input.name;
                this.appendChild(output);
            }
        }
    }
}
  • submitMe.importFields(form_element);为您要提交的三个表格中的每一个
  • 此函数会将每个表单的名称添加到其子输入的名称中(如果您有<input name="email">in <form name="login">,则提交的名称将为login_name.
  • 您可以将nameJoiner变量更改为其他内容,_以免与您的输入命名方案冲突。
  • 导入所有必要的表格后,请执行 submitMe.submit();