如何将数据发送到另一个页面而不将其附加到URL?

时间:2012-10-08 08:13:17

标签: javascript javascript-events

我有一个用户点击某个链接的情况,他被定向到一个页面,我想在其中添加一个代码来获取变量并重定向到另一个页面。

.i.e。用户点击<a href="sample.tpl">click here</a>

在sample.tpl上我想编写一个代码来将他重定向到另一个页面

<script>
window.location="http://mydomain.com/?page_id=10"

但我想在这个新链接上发送一个变量而不会出于安全原因将其附加到网址

我怎么能用一些安全的程序来做。

如果不清楚,请问我问题。

2 个答案:

答案 0 :(得分:4)

您可以创建一个包含method="post"的表单,一个hidden输入,其中包含您要传递的值,另一个submit按钮设置为常规链接(如果您还想手动发送)形式)。

然后只需通过submit()方法

手动或以编程方式提交表单

示例(页面加载后3秒后自动重定向) http://jsbin.com/avacoj/1/edit

HTML

<form method="post" action="http://mydomain.com/" id="f">
   <input type="hidden" name="page_id" value="10">
   <noscript><button type="submit">Continue</button></noscript> /* see below */
</form>

的js

window.onload = function() {
  var frm = document.getElementById('f');
  setTimeout(function() {
      frm.submit();
  }, 3000);
};

作为旁注,您可以考虑在submit标记内插入<noscript></noscript>按钮,这样即使用户设备上没有js,重定向仍然可能,因此页面仍然可以访问。

答案 1 :(得分:3)

除了Fabrizio的答案之外,还有人写了一个javascript函数,它允许你构建表单并在运行时通过POST发送它。

POSTGET类似(其中变量附加到url),但变量是通过标头发送的。仍然可以伪造POST请求,因此您必须对数据执行某种验证。

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    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();
}

像这样使用:

post_to_url("http://mydomain.com/", {'page_id':'10'}, "post");

来源: JavaScript post request like a form submit