Làm cách nào để chuyển hướng với dữ liệu bài đăng?
Làm thế nào để chuyển sang trang mới với $_POST
?
làm như thế nào? Nó được thực hiện như thế nào và tại sao nó phải được thực hiện
Làm cách nào để chuyển hướng với dữ liệu bài đăng?
Làm thế nào để chuyển sang trang mới với $_POST
?
làm như thế nào? Nó được thực hiện như thế nào và tại sao nó phải được thực hiện
$_POST
biến?
Câu trả lời:
Có một trình cắm thêm JQuery hoàn thành khá nhiều việc bạn đang cố gắng thực hiện: https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js .
Sau khi bao gồm JQuery và trình cắm thêm jquery.redirect.min.js, bạn có thể chỉ cần làm như sau:
$().redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});
Sử dụng mã sau trên các phiên bản JQuery mới hơn:
$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});
Hi vọng điêu nay co ich!
Đây là một hàm nhỏ đơn giản có thể áp dụng ở mọi nơi miễn là bạn đang sử dụng 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();
}
});
Theo các nhận xét, tôi đã mở rộng câu trả lời của mình:
// 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')
cho các thiết bị di động ... Ví dụ: $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit();
ý tưởng dựa trên câu trả lời này
value=""
thuộc tính. Vì vậy, nếu giá trị có chứa dấu ngoặc kép, nó không hoạt động. Chức năng chính nó có thể được thay thế bằng một trong đó là nhận thức về trích dẫn, như từ đây: stackoverflow.com/a/5533477/1775065
Tại sao không chỉ tạo một biểu mẫu với một số đầu vào ẩn và gửi nó bằng jQuery? Nên làm việc :)
Trước khi tài liệu / cửa sổ sẵn sàng, hãy thêm "extension" vào 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();
}
});
Sử dụng :
$.redirectPost("someurl.com", $("#SomeForm").serializeArray());
Lưu ý: phương pháp này không thể đăng tệp.
Tôi nghĩ đây là cách tốt nhất để làm điều đó!
<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>
Điều này sẽ gần như ngay lập tức và người dùng sẽ không thấy gì cả!
Điều này sẽ chuyển hướng với dữ liệu đã đăng
$(function() {
$('<form action="url.php" method="post"><input type="hidden" name="name" value="value1"></input></form>').appendTo('body').submit().remove();
});
}
hàm .submit () tự động gửi đến url,
hàm .remove () sẽ hủy biểu mẫu sau khi gửi
Điều này cần được làm rõ. Máy chủ của bạn có đang xử lý một BÀI ĐĂNG mà bạn muốn chuyển hướng đến một nơi khác không? Hoặc bạn đang muốn chuyển hướng yêu cầu GET của cơ quan quản lý đến một trang khác đang mong đợi ĐĂNG?
Trong cả hai trường hợp, những gì bạn có thể làm là như sau:
var f = $('<form>');
$('<input>').attr('name', '...').attr('value', '...');
//after all fields are added
f.submit();
Có lẽ bạn nên tạo một liên kết có nội dung "nhấp vào đây nếu không được chuyển hướng tự động" để đối phó với các trình chặn cửa sổ bật lên.
Tương tự như câu trả lời trên, nhưng được viết khác.
$.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();
}
});
tại sao không chỉ sử dụng một nút thay vì gửi. nhấp vào nút sẽ cho phép bạn tạo một url thích hợp để trình duyệt của bạn chuyển hướng đến.
$("#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);
});
Tôi đã bao gồm plugin jquery.redirect.min.js trong phần đầu cùng với giải pháp json này để gửi cùng với dữ liệu
<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>
Sau đó, ngay sau khi biểu mẫu tôi đã thêm
$(function(){
$( '#your_form_Id' ).submit();
});
Tạo và điền vào biểu mẫu ẩn method = POST action = "http://example.com/vote" và gửi nó đi, thay vì sử dụng window.location.
hoặc là
$('#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();
"mở rộng" giải pháp trên với target. Vì lý do nào đó, tôi cần khả năng chuyển hướng bài đăng đến _blank hoặc một khung khác:
$.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();
}
});