2013-09-26 40 views
62

如何用邮政数据重定向?jQuery - 用邮政数据重定向

如何移动到新页面$_POST

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

+4

我其实很感兴趣,听到这个答案。 –

+0

使用POST请求设置窗口位置是不可能的,只有GET请求,并且不可能重定向POST请求,所以通常的解决方案是动态创建一个包含所需数据和操作属性的表单,然后提交它。 – adeneo

+0

你忘记了PHP标签,还是jQuery有一个'$ _POST'变量? –

回答

66

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

包括jQuery和的jquery.redirect.min.js插件,你可以简单地做这样的事情后:

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

希望这有助于!

+0

谢谢..这个工作对我来说 – Binaryrespawn

+0

@TimS,在检查出这个链接后,我仍然不清楚如何使用post在新的页面中检索数据。 – gotguts

+0

不要说,我想通了,并得到它的工作。伟大的建议! – gotguts

7

为什么不只是创建一个隐藏的输入和使用jQuery提交表单?应该工作:)

+0

无法使用拖放文件上传。出于安全原因,您不能分配文件输入。 – mlt

+0

我不能想到任何情况,当你可能想重定向用户的地方,并使他们上传一个文件与相同的请求。但是,当然 - 这是真的,在这种情况下不起作用。 – kao3991

+0

@mlt我不知道为什么它不起作用。您不会将任何内容分配给文件输入,但您可以使用与表单同时发布的其他输入隐藏字段。 – Danosaure

0

为什么不只是使用按钮,而不是提交。点击该按钮可让您构建适合浏览器重定向到的正确网址。

$("#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); 
}); 
+2

这只会导致正常的GET请求,因为URL正在改变。原来的问题是做POST请求。 –

0

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

在这两种情况下,你可以做的是这样的:

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

这可能是一个好主意,做一个链接,说“点击这里如果没有自动重定向”,以应对弹出窗口阻止程序。

0

我列入jquery.redirect.min.js head部分插件与此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(); 
    }); 
+0

注意:输入应该是输入的Ids非名字! – kptrick

70

这里的一个简单的小函数,可以在任何地方应用,只要你使用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(); 
    } 
}); 

%的意见,我已经在我的答案扩展:

// 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(); 
    } 
}); 
+3

这是一个很容易实现的功能... – CrandellWS

+9

为移动设备添加'.appendTo('body')'例如: '$('

'+ form +'
').appendTo('body')。submit();'基于此答案的思路(http://stackoverflow.com/a/18870799) – CrandellWS

+4

这个解决方案很多比接受的回答更好。这很容易实现,不需要加载额外的库! –

0

构建并填写一个隐藏的方法= 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(); 
2

文件/窗口准备添加之前 “扩展” 到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()); 

注:此方法斜面后的文件。

0

我认为这是做到这一点的最好方法!

<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> 

这几乎是瞬间的,用户不会看到任何东西!

0

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

$.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(); 
    } 
});