Sau khi gửi biểu mẫu POST, mở một cửa sổ mới hiển thị kết quả


149

Yêu cầu bài đăng JavaScript như gửi biểu mẫu cho bạn biết cách gửi biểu mẫu mà bạn tạo thông qua POST trong JavaScript. Dưới đây là mã sửa đổi của tôi.

var form = document.createElement("form");

form.setAttribute("method", "post");
form.setAttribute("action", "test.jsp");

var hiddenField = document.createElement("input");  

hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value", "bob");
form.appendChild(hiddenField);
document.body.appendChild(form); // Not entirely sure if this is necessary          
form.submit();

Những gì tôi muốn làm là mở kết quả trong một cửa sổ mới. Tôi hiện đang sử dụng một cái gì đó như thế này để mở một trang trong một cửa sổ mới:

onclick = window.open(test.html, '', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');

2
Lưu ý document.body.appendChild(form) cần thiết, xem stackoverflow.com/q/42053775/58241
benrwb

Câu trả lời:


220

Thêm vào

<form target="_blank" ...></form>

hoặc là

form.setAttribute("target", "_blank");

theo định nghĩa của mẫu đơn của bạn.


Hãy nhớ thêm id thuộc tính vào thành phần biểu mẫu, nếu không, điều này không hoạt động trong trình duyệt Safari mặc dù trình chặn cửa sổ bật lên bị tắt. <form id = "popupForm" target = "_ blank" ...> </ form>
Naren

131

Nếu bạn muốn tạo và gửi biểu mẫu của mình từ Javascript như trong câu hỏi của bạn và bạn muốn tạo cửa sổ bật lên với các tính năng tùy chỉnh, tôi đề xuất giải pháp này (tôi đặt nhận xét bên trên các dòng tôi đã thêm):

var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "test.jsp");

// setting form target to a window named 'formresult'
form.setAttribute("target", "formresult");

var hiddenField = document.createElement("input");              
hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value", "bob");
form.appendChild(hiddenField);
document.body.appendChild(form);

// creating the 'formresult' window with custom features prior to submitting the form
window.open('test.html', 'formresult', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');

form.submit();

18
+1 Tốt hơn câu trả lời được chấp nhận, vì nó thực sự đưa kết quả vào cửa sổ bật lên với các tùy chọn mà OP muốn.
Nicole

Nó không hoạt động với tôi trên IE - nó tạo ra một cửa sổ mới với các thuộc tính được chỉ định và sau đó tải kết quả vào một cửa sổ mới khác, để trống cửa sổ trước đó.
mjaggard

1
@mjaggard: Bạn đã thêm gì? Có thể đáng để đề xuất một chỉnh sửa cho câu trả lời này.
Michael Myers

3
@SaurabhNanda Theo như tôi có thể nói, targetthuộc tính trên formphần tử không bị phản đối trong HTML 4.01 Chuyển tiếp và rõ ràng là ở lại trong HTML 5 .
Marko Dumic

1
Một cảnh báo: Tôi đã phải đính kèm biểu mẫu của mình vào phần thân tài liệu trước khi nó hoạt động (trong FF 17). Tạo ra một mảnh vỡ và cố gắng làm cho nó không hoạt động.
voidstate

8
var urlAction = 'whatever.php';
var data = {param1:'value1'};

var $form = $('<form target="_blank" method="POST" action="' + urlAction + '">');
$.each(data, function(k,v){
    $form.append('<input type="hidden" name="' + k + '" value="' + v + '">');
});
$form.submit();

Tôi có thiếu thứ gì không, hay bạn vẫn cần .appendthẻ đóng?
theJollySin

Tôi nghĩ rằng điều này là không đầy đủ sau khi thêm vào biểu mẫu bạn nên loại bỏ nó để thực hành tốt nhất.
ncubica

@theJollySin: Bằng cách gọi jQuery trên thẻ, nó sẽ biến thành một phần tử DOM thực và sẽ bị đóng khi chèn vào DOM.
Janus Troelsen

1
Tôi nghĩ rằng có một phần phụ lục còn thiếu ('cơ thể') và dòng cuối cùng nên được viết là:$form.appendTo('body').submit();
PBrockmann

1

Tôi biết phương pháp cơ bản này:

1)

<input type=”image src=”submit.png”> (in any place)

2)

<form name=”print”>
<input type=”hidden name=”a value=”<?= $a ?>”>
<input type=”hidden name=”b value=”<?= $b ?>”>
<input type=”hidden name=”c value=”<?= $c ?>”>
</form>

3)

<script>
$(‘#submit’).click(function(){
    open(”,”results”);
    with(document.print)
    {
        method = POST”;
        action = results.php”;
        target = results”;
        submit();
    }
});
</script>

Làm!


3
đó là với jquery! anh ta yêu cầu JS thuần túy
Aviatrix

1

Giải pháp làm việc đơn giản nhất cho cửa sổ luồng (được thử nghiệm tại Chrome):

<form action='...' method=post target="result" onsubmit="window.open('','result','width=800,height=400');">
    <input name="..">
    ....
</form>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.