我不确定这是否可行。但我想知道是否有人知道如何使一个超链接传递一些变量和使用POST(像一个表单)而不是GET。
当前回答
这是一个老问题,但没有一个答案能完全满足要求。所以我又增加了一个答案。
据我所知,请求的代码应该只对普通超链接的工作方式做一个更改:应该使用POST方法而不是GET。其直接影响将是:
当链接被点击时,我们应该重新加载标签到href的url 因为方法是POST,所以我们加载的目标页面的URL中不应该有查询字符串 该页应该通过POST接收参数(名称和值)中的数据
我在这里使用jquery,但这可以用本地api完成(当然更难和更长的时间)。
<html>
<head>
<script src="path/to/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
$("a.post").click(function(e) {
e.stopPropagation();
e.preventDefault();
var href = this.href;
var parts = href.split('?');
var url = parts[0];
var params = parts[1].split('&');
var pp, inputs = '';
for(var i = 0, n = params.length; i < n; i++) {
pp = params[i].split('=');
inputs += '<input type="hidden" name="' + pp[0] + '" value="' + pp[1] + '" />';
}
$("body").append('<form action="'+url+'" method="post" id="poster">'+inputs+'</form>');
$("#poster").submit();
});
});
</script>
</head>
<body>
<a class="post" href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Post it!</a><br/>
<a href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Normal link</a>
</body>
</html>
为了查看结果,将以下文件保存为reflector.php,并将其保存在与上面文件相同的目录中。
<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>
<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>
其他回答
可以使用jQuery函数
function makePostRequest(url, data) {
var jForm = $('<form></form>');
jForm.attr('action', url);
jForm.attr('method', 'post');
for (name in data) {
var jInput = $("<input>");
jInput.attr('name', name);
jInput.attr('value', data[name]);
jForm.append(jInput);
}
jForm.submit();
}
下面是jsFiddle (http://jsfiddle.net/S7zUm/)中的一个例子
另一个工作示例,使用类似的方法张贴:创建一个html表单,使用javascript来模拟张贴。这做了两件事:发布数据到一个新的页面,并在一个新的窗口/选项卡中打开它。
HTML
<form name='myForm' target="_blank" action='newpage.html' method='post'>
<input type="hidden" name="thisIsTheParameterName" value="testDataToBePosted"/>
</form>
JavaScript
document.forms["myForm"].submit();
JQuery:通过POST提交隐藏表单的链接。
由于我花了很多时间来理解所有这些答案,而且它们都有一些有趣的细节,下面是最终适合我的组合版本,我更喜欢它的简单性。
我的方法仍然是创建一个隐藏表单,并通过单击页面其他地方的链接提交它。表单将被放置在页面主体的哪个位置并不重要。
表单代码:
<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
<input type="hidden" name="myParameterName" value="myParameterValue">
</form>
描述:
display: none隐藏表单。你也可以把它放在一个div或另一个元素中,并在元素上设置display: none。
type="hidden"将创建一个不会显示的字段,但其数据将以任何方式传输到操作(参见W3C)。我知道这是最简单的输入类型。
链接的代码:
<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>
描述:
空的href只针对同一页。但在这种情况下,这并不重要,因为返回false将阻止浏览器跟踪该链接。当然,你可能想要改变这种行为。在我的特定情况下,该操作在最后包含重定向。
onclick被用来避免使用href="javascript:…",正如mplungjan所指出的那样。$ (' # myHiddenFormId ')。submit ();用于提交表单(而不是定义函数,因为代码非常小)。
该链接看起来与任何其他<a>元素完全相同。实际上,您可以使用任何其他元素来代替<a>(例如<span>或图像)。
你可以使用javascript函数。JQuery有一个很好的内置post函数,如果你决定使用它:
JQuery的帖子
<script language="javascript">
function DoPost(){
$.post("WhateverPage.php", { name: "John", time: "2pm" } ); //Your values here..
}
</script>
<a href="javascript:DoPost()">Click Here</A>
检查这个,它会帮助你
$().redirect('test.php', {'a': 'value1', 'b': 'value2'});
推荐文章
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 为什么我的CSS3媒体查询不能在移动设备上工作?
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?
- 下一个元素的CSS选择器语法是什么?
- 未捕获的SyntaxError:
- [].slice的解释。调用javascript?
- jQuery日期/时间选择器
- 我如何用CSS跨浏览器绘制垂直文本?
- 我如何预填充一个jQuery Datepicker文本框与今天的日期?