18

我有一个页面 ( page 1),它接受发布请求,做一些事情并在最后显示一些数据。

从另一个页面(page 2),我想重定向到page 1单击按钮时,当然page 1通过 POST 发送所需的所有相关数据。

当然,我可以使用旧的技巧,在页面上有一个不可见的表单,在用户单击按钮后使用 jquery 填充我需要的所有数据,然后自动提交()它。但这看起来很麻烦 - 使用类似于 的语法要好得多$.post,而不是开始操作 html。$.post将是完美的,如果它实际上重定向到页面而不是异步发出请求(我不能只是page 1在 ajaxy 帖子完成后重定向到,因为page 1需要数据来显示某些东西)。

有什么方法可以用 jquery 做我想做的事,还是丑陋的隐形形式是唯一的出路?

附言

我知道还有其他复杂的方法可以实现我想要的,例如使用$.post并在我们当前所在的页面中植入响应的 html,但我只想知道是否有使用 jquery 执行此操作的简单方法

4

5 回答 5

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();
    });
}
于 2010-10-02T15:39:16.957 回答
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();
}
于 2011-07-09T03:42:16.127 回答
0

如果您必须发出 POST 请求,那么隐形表单是您更好的选择之一。

如果您的应用程序将使用 GET 请求,我会将数据编码到查询字符串中并执行一个。

document.location.href =

您可以使用它jQuery.serialize来生成查询字符串。

于 2010-10-02T15:13:34.777 回答
0

我想答案是没有直接的方法。有关添加此功能的一般功能,请参阅 Greg W 的回答。

于 2010-11-16T08:56:27.343 回答
-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


});
于 2010-10-02T15:23:50.723 回答