【问题标题】:jQuery - Redirect with post datajQuery - 使用帖子数据重定向
【发布时间】:2013-10-02 22:04:56
【问题描述】:

如何使用帖子数据重定向?

如何使用$_POST 移动到新页面?

如何做到这一点?它是如何完成的,为什么要这样做

【问题讨论】:

  • 我其实很想听到这个答案。
  • 无法通过 POST 请求设置 windows 位置,只能使用 GET 请求,并且无法重定向 POST 请求,因此通常的解决方案是动态创建包含所需数据的表单并action 属性,然后提交。
  • 是你忘记了 PHP 标签,还是 jQuery 有 $_POST 变量?
  • @y2k,这不是和stackoverflow.com/q/8389646/632951相同问题吗?

标签: javascript jquery html post


【解决方案1】:

为什么不创建一个带有一些隐藏输入的表单并使用 jQuery 提交呢?应该工作:)

【讨论】:

  • 不适用于拖放文件上传。出于安全原因,您不能分配文件输入。
  • 我想不出任何情况,您可能希望将用户重定向到某个地方并让他们上传具有相同请求的文件。但当然 - 这是真的,在这种情况下它不会起作用。
  • @mlt 我不确定为什么它不起作用。您没有为文件输入分配任何内容,但您使用与表单同时发布的其他输入隐藏字段。
【解决方案2】:

有一个 JQuery 插件几乎可以完成您想要做的事情:https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js

包含 JQuery 和 jquery.redirect.min.js 插件后,您可以简单地执行以下操作:

$().redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});

在较新的 JQuery 版本上使用以下代码:

$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});

希望这会有所帮助!

【讨论】:

  • @TimS,查看该链接后,我仍然不清楚如何使用 post 检索新页面中的数据。
  • 没关系,我想通了,让它工作。好建议!
  • 使用 jquery 2.1.3,对我来说正确的语法是 $.redirect(...);没有括号。
  • 所以我们不能重定向到不同的网址并发布到不同的网址>?
【解决方案3】:

为什么不直接使用按钮而不是提交。 单击该按钮将让您为浏览器构建一个正确的 URL 以重定向到。

$("#button").click(function() {
   var url = 'site.com/process.php?';
   $('form input').each(function() {
       url += 'key=' + $(this).val() + "&";
   });
   // handle removal of last &.

   window.location.replace(url);
});

【讨论】:

  • 这只会导致正常的 GET 请求,因为 url 正在更改。最初的问题是发出 POST 请求。
【解决方案4】:

这需要澄清。您的服务器是否正在处理您想要重定向到其他地方的 POST?或者您想将一个 regulatr GET 请求重定向到另一个需要 POST 的页面?

在任何一种情况下,您都可以这样做:

var f = $('<form>');
$('<input>').attr('name', '...').attr('value', '...');
//after all fields are added
f.submit();

创建一个显示“如果未自动重定向,请单击此处”的链接来处理弹出窗口拦截器可能是个好主意。

【讨论】:

    【解决方案5】:

    我在 head 部分中包含了 jquery.redirect.min.js 插件以及这个 json 解决方案以提交数据

    <script type="text/javascript">     
        $(function () {
         $('form').on('submit', function(e) {
           $.ajax({
            type: 'post',
            url: 'your_POST_URL',
            data: $('form').serialize(),
            success: function () {
             // now redirect
             $().redirect('your_POST_URL', {
              'input1': $("value1").val(), 
              'input2': $("value2").val(),
          'input3': $("value3").val()
           });
          }
       });
       e.preventDefault();
     });
     });
     </script>
    

    然后在我添加的表单之后立即

     $(function(){
         $( '#your_form_Id' ).submit();
        });
    

    【讨论】:

    • 注意:输入应该是ID而不是名字!
    【解决方案6】:

    这是一个简单的小函数,只要你使用 jQuery,它就可以在任何地方应用。

    var redirect = 'http://www.website.com/page?id=23231';
    $.redirectPost(redirect, {x: 'example', y: 'abc'});
    
    // jquery extend function
    $.extend(
    {
        redirectPost: function(location, args)
        {
            var form = '';
            $.each( args, function( key, value ) {
                form += '<input type="hidden" name="'+key+'" value="'+value+'">';
            });
            $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit();
        }
    });
    

    根据 cmets,我已经扩展了我的答案:

    // jquery extend function
    $.extend(
    {
        redirectPost: function(location, args)
        {
            var form = $('<form></form>');
            form.attr("method", "post");
            form.attr("action", location);
    
            $.each( args, function( key, value ) {
                var field = $('<input></input>');
    
                field.attr("type", "hidden");
                field.attr("name", key);
                field.attr("value", value);
    
                form.append(field);
            });
            $(form).appendTo('body').submit();
        }
    });
    

    【讨论】:

    • 为移动设备添加.appendTo('body')...示例:$('&lt;form action="'+location+'" method="POST"&gt;'+form+'&lt;/form&gt;').appendTo('body').submit(); 基于this answer 的想法
    • 此解决方案比 imo 接受的答案要好得多。它易于实现,无需加载额外的库!
    • 我在尝试使用它时得到 $.redirectPost is not a function 错误。
    • 扩展的好主意。但此实现在将值放入value="" 属性之前不会对其进行转义。因此,如果 value 包含引号,则它不起作用。函数本身可以替换为知道引用的函数,例如:stackoverflow.com/a/5533477/1775065
    【解决方案7】:

    构造并填写一个隐藏的 method=POST action="http://example.com/vote" 表单并提交,而不是使用 window.location。

    $('#inset_form').html(
       '<form action="url" name="form" method="post" style="display:none;">
        <input type="text" name="name" value="' + value + '" /></form>');
    document.forms['form'].submit();
    

    【讨论】:

      【解决方案8】:

      在文档/窗口准备好之前添加“扩展”到 jQuery :

      $.extend(
      {
          redirectPost: function(location, args)
          {
              var form = '';
              $.each( args, function( key, value ) {
      
                  form += '<input type="hidden" name="'+value.name+'" value="'+value.value+'">';
                  form += '<input type="hidden" name="'+key+'" value="'+value.value+'">';
              });
              $('<form action="'+location+'" method="POST">'+form+'</form>').submit();
          }
      });
      

      使用:

      $.redirectPost("someurl.com", $("#SomeForm").serializeArray());
      

      注意:此方法不能发布文件。

      【讨论】:

        【解决方案9】:

        我认为这是最好的方法!

        <html>
        <body onload="document.getElementById('redirectForm').submit()">
        <form id='redirectForm' method='POST' action='/done.html'>
        <input type='hidden' name='status' value='complete'/>
        <input type='hidden' name='id' value='0u812'/>
        <input type='submit' value='Please Click Here To Continue'/>
        </form>
        </body>
        </html>
        

        这几乎是瞬间完成的,用户什么也看不到!

        【讨论】:

          【解决方案10】:

          与上述答案类似,但写法不同。

          $.extend(
          {
              redirectPost: function (location, args) {
                  var form = $('<form>', { action: location, method: 'post' });
                  $.each(args,
                      function (key, value) {
                          $(form).append(
                              $('<input>', { type: 'hidden', name: key, value: value })
                          );
                      });
                  $(form).appendTo('body').submit();
              }
          });
          

          【讨论】:

            【解决方案11】:

            这将使用发布的数据重定向

            $(function() {
                   $('<form action="url.php" method="post"><input type="hidden" name="name" value="value1"></input></form>').appendTo('body').submit().remove();
                });
            
                }
            

            .submit() 函数自动提交到 url
            .remove() 函数在提交后杀死表单

            【讨论】:

              【解决方案12】:

              用目标“扩展”above solution。出于某种原因,我需要将帖子重定向到 _blank 或其他框架的可能性:

              $.extend(
                 {
                     redirectPost: function(location, args, target = "_self")
                     {
                         var form = $('<form></form>');
                         form.attr("method", "post");
                         form.attr("action", location);
                         form.attr("target", target);
                         $.each( args, function( key, value ) {
                             var field = $('<input></input>');
                             field.attr("type", "hidden");
                             field.attr("name", key);
                             field.attr("value", value);
                             form.append(field);
                         });
                         $(form).appendTo('body').submit();
                     }
                 });
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-09-08
                • 1970-01-01
                • 2019-03-23
                • 1970-01-01
                • 1970-01-01
                • 2011-03-02
                • 1970-01-01
                • 2010-09-26
                相关资源
                最近更新 更多