我有一个页面(page 1
)接受发布请求,做一些事情并在最后显示一些数据。
从其他页面(page 2
),我想在点击按钮时重定向到page 1
,当然要通过POST发送page 1
所需的所有相关数据。
当然,我可以使用在页面上有一个不可见形式的旧hack,在用户点击按钮之后填入我需要的所有数据,然后自动提交()。
但这看起来很麻烦 - 使用类似于$.post
的语法要好得多,而不是开始操纵html。 $.post
是完美的,是否实际重定向到页面而不是异步发出请求(我不能在ajaxy帖子完成后重定向到page 1
,因为page 1
需要显示某些内容的数据。)
有没有办法用jquery做我想要的东西,或者丑陋的隐形形式是唯一的出路?
P.S
我知道还有其他令人费解的方法可以达到我想要的效果,例如使用$.post
并在我们当前所在的页面中植入回复的html,但我只是想知道是否有直截了当使用jquery
答案 0 :(得分:15)
这让我想到了一个小jQuery函数来模仿你所描述的$ .post行为。它仍然在后台使用不可见的形式,但它的语法相对简洁明了。
$(document).ready(function(){
$('#myButton').PostIt('post.php', {foo:'bar', abc:'def', life:42});
$('#myOtherButton').PostIt('post.php', dataObjectFromSomewhereElse);
});
$.fn.PostIt = function(url, data){
$(this).click(function(event){
event.preventDefault();
$('body').append($('<form/>', {
id: 'jQueryPostItForm',
method: 'POST',
action: url
}));
for(var i in data){
$('#jQueryPostItForm').append($('<input/>', {
type: 'hidden',
name: i,
value: data[i]
}));
}
$('#jQueryPostItForm').submit();
});
}
答案 1 :(得分:9)
我将Greg W的代码改编为可以在代码中调用的直接函数:
function postIt(url, data){
$('body').append($('<form/>', {
id: 'jQueryPostItForm',
method: 'POST',
action: url
}));
for(var i in data){
$('#jQueryPostItForm').append($('<input/>', {
type: 'hidden',
name: i,
value: data[i]
}));
}
$('#jQueryPostItForm').submit();
}
答案 2 :(得分:0)
如果您必须发出POST请求,那么隐形表单是您更好的选择之一。
如果您的应用程序将使用GET请求,我会将数据编码到查询字符串中并执行。
document.location.href =
您可以使用jQuery.serialize
生成查询字符串。
答案 3 :(得分:0)
我想答案是没有直接的方式。有关添加此功能的常规功能,请参阅Greg W的回答。
答案 4 :(得分:-2)
HTML:
<form id="myform" method="get" acction="page2">
<!-- data -->
</form>
JS:
$('#myform').bind('submit', function(ev) {
ev.stopPropagation();
var ok = true;
//manipulate html and 'ok'
return ok; // if ok == false, don't execute post
});