使用window.location.href传递post数据

时间:2010-03-03 00:25:42

标签: javascript jquery

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

9 个答案:

答案 0 :(得分:72)

使用window.location.href无法发送POST请求。

您需要做的是设置一个包含数据字段的form标记,将表单的action属性设置为URL,将method属性设置为POST,然后在submit代码上调用form方法。

答案 1 :(得分:69)

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

<form style="display: hidden" 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();

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

答案 2 :(得分:8)

简答:不。 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">中有<form name="login">,则提交的名称将为login_name。< / LI>
  • 您可以将nameJoiner变量更改为_以外的其他变量,这样就不会与您的输入命名方案发生冲突。
  • 导入完所有必要表格后,请submitMe.submit();

答案 3 :(得分:6)

使用此文件:&#34; jquery.redirect.js&#34;

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

请参阅https://github.com/mgalante/jquery.redirect

答案 4 :(得分:4)

正如在其他答案中所说的那样,无法使用window.location.href发出POST请求,要做到这一点,您可以创建一个表单并立即提交。

您可以使用此功能:

<ul class="list-inline">
  <li class="list-inline-item">Lorem ipsum</li>
  <li class="list-inline-item">Phasellus iaculis</li>
  <li class="list-inline-item">Nulla volutpat</li>
</ul>

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

答案 5 :(得分:3)

就像这一样简单 $.post( "som_page.php", { data1: value1 , data2: value2 .... } ).done(function( data ) { $( "body" ).html(data);});
我必须解决这个问题才能对我的应用程序进行屏幕锁定,我必须将敏感数据作为用户和他正在工作的URL传递。然后创建一个执行此代码的函数

答案 6 :(得分:2)

您是否考虑过使用本地/会话存储? - 或 - 取决于您正在建设的复杂性;你甚至可以使用indexDB。

注意

Local storageindexDB不安全 - 因此您希望避免在其中任何一个中存储任何敏感/个人数据(即姓名,地址,电子邮件地址,DOB等)。

对于任何敏感的事情,

Session Storage都是一个更安全的选项,只有设置项目的原点才能访问它,并且一旦浏览器/标签关闭,它就会被清除。

IndexDB稍微多一点[但并不多]复杂,并且是30MB noSQL database内置于每个浏览器中(但如果用户选择,则基本上可以无限制) - &gt;下次使用Google文档时,请打开DevTools - &gt;申请 - &gt; IndexDB并走高峰。 [剧透警报:已加密]。

关注LocalSession Storage;这些都很简单易用:

// To Set 
sessionStorage.setItem( 'key' , 'value' );

// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth's Frozen Bananas", ...  } );    

// Get The Data 
const fromData = sessionStorage.getItem( 'key' );     

// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );

// Remove 
sessionStorage.removeItem( 'key' );

// Remove _all_ saved data sessionStorage
sessionStorage.clear( ); 

如果简单不是你的事 - 或者 - 你可能希望走出去并尝试不同的方法 - &gt;你可以使用shared web worker ...你知道,只是为了踢。

答案 7 :(得分:1)

我对此使用了非常不同的方法。我在客户端中设置了浏览器 cookie,该 cookie 在我设置 window.location.href 后一秒过期。

这比在 URL 中嵌入参数更安全。

服务器以cookie的形式接收参数,发送后浏览器立即删除cookie。

const expires = new Date(Date.now() + 1000).toUTCString()
document.cookie = `oauth-username=user123; expires=${expires}`
window.location.href = `https:foo.com/oauth/google/link`

答案 8 :(得分:-4)

您可以使用GET代替pass,但不要将此方法用于重要值,

function passIDto(IDval){    
window.location.href = "CustomerBasket.php?oridd=" +  IDval ;
}   

在CustomerBasket.php

<?php
  $value = $_GET["oridd"];
  echo  $value;
?>