После отправки формы POST откройте новое окно, показывающее результат

Запрос на отправку JavaScript как отправка формы показывает вам, как отправить форму, которую вы создаете с помощью POST в JavaScript. Ниже мой измененный код.

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();

Я бы хотел открыть результаты в новом окне. В настоящее время я использую что-то вроде этого, чтобы открыть страницу в новом окне:

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

Обратите внимание, что необходим document.body.appendChild(form)является, см. stackoverflow.com/q/42053775/58241

benrwb 14.12.2017 16:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
150
1
283 491
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Добавлять

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

или же

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

к определению вашей формы.

Не забудьте добавить идентификатор атрибута в элемент формы, иначе это не будет работать в браузере Safari, даже если блокировщик всплывающих окон отключен. <form id = "popupForm" target = "_ blank" ...> </form>

Naren 12.07.2017 19:09

Коротко и мило. Благодарить!!

rahim.nagori 29.09.2020 15:38

Если вы хотите создать и отправить свою форму из Javascript, как в вашем вопросе, и вы хотите создать всплывающее окно с настраиваемыми функциями, я предлагаю это решение (я помещаю комментарии над строками, которые я добавил):

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();

+1 Лучше, чем принятый ответ, поскольку он фактически помещает результат во всплывающее окно с параметрами, которые хотел OP.

Nicole 06.03.2010 04:34

У меня не работает в IE - он создает новое окно с указанными атрибутами, а затем загружает результаты в другое новое окно, оставляя предыдущее окно пустым.

mjaggard 16.11.2011 17:48

Я добавил новую строку, чтобы она работала в IE - это неприятно, но работает. В Firefox (который не поддерживает readyState) никогда не будет установлен параметр «загрузка».

mjaggard 16.11.2011 18:14

@mjaggard: Что ты добавил? Возможно, стоит предложить отредактировать этот ответ.

Michael Myers 22.11.2011 01:00

Я предложил отредактировать, но до сих пор не вижу его. while (newWind.document.readyState == "загрузка") {}

mjaggard 22.11.2011 20:00

1. Это работает во всех браузерах? 2. w3schools.com/tags/att_form_target.asp утверждает, что целевой атрибут элемента form устарел.

Saurabh Nanda 22.06.2012 20:31

@SaurabhNanda Насколько я могу судить, атрибут target в элементе form имеет значение не устарело в HTML 4.01 переходный и, по-видимому, должен оставаться в HTML 5.

Marko Dumic 27.06.2012 17:58

Предупреждение: мне нужно было прикрепить свою форму к телу документа, чтобы это сработало (в FF 17). Создать фрагмент и попытаться восстановить его не удалось.

voidstate 28.11.2012 18:10

Не забудьте добавить идентификатор атрибута в элемент формы, иначе это не будет работать в браузере Safari, даже если блокировщик всплывающих окон отключен. <form id = "popupForm" target = "_ blank" ...> </form>

Naren 12.07.2017 19:11

@MarkoDumic Немного поздно спрашивать, но ... у меня была точно такая же проблема, и я попробовал ваш код, указанный выше. я получаю два всплывающих окна вместо одного. один для отправки формы (с фактическим URL-адресом), а другой для window.open с test.html (tht дает 404). знаете ли вы, почему это произошло?

Night Monger 04.01.2019 05:20

Также хотел добавить, что у нас приложение на основе Citrix, поэтому только IE. не уверен, имеет ли это значение

Night Monger 04.01.2019 05:36

Я знаю этот основной метод:

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>

Работает!

вот с jquery! он просит чистый JS

Nikola Sivkov 06.03.2010 04:26

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();

Я что-то упустил или вам все еще нужен тег закрытия формы .append?

theJollySin 27.10.2012 01:29

Я думаю, что это неполно после добавления формы, вы должны удалить ее для лучшей практики.

ncubica 16.11.2012 21:42

@theJollySin: вызывая jQuery для тега, он превратится в настоящий элемент DOM и будет закрыт при вставке в DOM.

Janus Troelsen 26.07.2013 00:39

Я думаю, что отсутствует appendTo ('body'), и последняя строка должна быть написана как: $form.appendTo('body').submit();

PBrockmann 03.06.2017 02:13

Самое простое рабочее решение для окна потока (проверено в Chrome):

<form action='...' method=post target = "result" onsubmit = "window.open('','result','width=800,height=400');">
    <input name = "..">
    ....
</form>

Другие вопросы по теме