Javascript window.open передать значения с помощью POST
У меня есть функция JavaScript, которая использует window.open для вызова другой страницы и возвращения результата.
Вот раздел моего кода:
var windowFeatures = "status=0, toolbar=0, location=0, menubar=0, directories=0, resizable=1, scrollbars=1";
window.open ('http://www.domain.com/index.php?p=view.map&coords=' + encodeURIComponent(coords), 'JobWindow', windowFeatures);
Моя проблема сейчас в том, что я передаю много данных для обработки GET, и мне нужно передать их, используя метод POST.
Как я могу преобразовать приведенный выше код, чтобы открыть страницу, используя метод POST без применения форм по всей странице (на странице перечислены 100 заказов со списком поставщиков - я пытаюсь сопоставить поставщиков)
6 ответов
Я использовал один из вариантов выше, но вместо печати html я создал форму и отправил ее на сторонний URL:
var mapForm = document.createElement("form");
mapForm.target = "Map";
mapForm.method = "POST"; // or "post" if appropriate
mapForm.action = "http://www.url.com/map.php";
var mapInput = document.createElement("input");
mapInput.type = "text";
mapInput.name = "addrs";
mapInput.value = data;
mapForm.appendChild(mapInput);
document.body.appendChild(mapForm);
map = window.open("", "Map", "status=0,title=0,height=600,width=800,scrollbars=1");
if (map) {
mapForm.submit();
} else {
alert('You must allow popups for this map to work.');
}
Для чего стоит, вот ранее предоставленный код, инкапсулированный в функцию.
openWindowWithPost("http://www.example.com/index.php", {
p: "view.map",
coords: encodeURIComponent(coords)
});
Определение функции:
function openWindowWithPost(url, data) {
var form = document.createElement("form");
form.target = "_blank";
form.method = "POST";
form.action = url;
form.style.display = "none";
for (var key in data) {
var input = document.createElement("input");
input.type = "hidden";
input.name = key;
input.value = data[key];
form.appendChild(input);
}
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
Спасибо php-b-грейдер. Я улучшил код, не нужно использовать window.open (), цель уже указана в форме.
// Create a form
var mapForm = document.createElement("form");
mapForm.target = "_blank";
mapForm.method = "POST";
mapForm.action = "abmCatalogs.ftl";
// Create an input
var mapInput = document.createElement("input");
mapInput.type = "text";
mapInput.name = "variable";
mapInput.value = "lalalalala";
// Add the input to the form
mapForm.appendChild(mapInput);
// Add the form to dom
document.body.appendChild(mapForm);
// Just submit
mapForm.submit();
для целевых вариантов -> w3schools - Target
Спасибо php-b-грейдер!
ниже универсальной функции для window.open передать значения с помощью POST:
function windowOpenInPost(actionUrl,windowName, windowFeatures, keyParams, valueParams)
{
var mapForm = document.createElement("form");
var milliseconds = new Date().getTime();
windowName = windowName+milliseconds;
mapForm.target = windowName;
mapForm.method = "POST";
mapForm.action = actionUrl;
if (keyParams && valueParams && (keyParams.length == valueParams.length)){
for (var i = 0; i < keyParams.length; i++){
var mapInput = document.createElement("input");
mapInput.type = "hidden";
mapInput.name = keyParams[i];
mapInput.value = valueParams[i];
mapForm.appendChild(mapInput);
}
document.body.appendChild(mapForm);
}
map = window.open('', windowName, windowFeatures);
if (map) {
mapForm.submit();
} else {
alert('You must allow popups for this map to work.');
}}
Хотя этот вопрос был давно, спасибо всем за вклад, который помог мне решить аналогичную проблему. Я также сделал небольшую модификацию, основанную на ответах других здесь и сделав несколько входов / ценностей в один объект (json); и надеюсь, что это кому-то поможет.
ЯШ:
//example: params={id:'123',name:'foo'};
mapInput.name = "data";
mapInput.value = JSON.stringify(params);
PHP:
$data=json_decode($_POST['data']);
echo $data->id;
echo $data->name;
Код помог мне выполнить мое требование.
Я сделал некоторые изменения и с помощью формы я заполнил это. Вот мой код
Нужен атрибут 'target' для 'form' - вот и все!
форма
<form id="view_form" name="view_form" method="post" action="view_report.php" target="Map" >
<input type="text" value="<?php echo $sale->myvalue1; ?>" name="my_value1"/>
<input type="text" value="<?php echo $sale->myvalue2; ?>" name="my_value2"/>
<input type="button" id="download" name="download" value="View report" onclick="view_my_report();" />
</form>
JavaScript
function view_my_report() {
var mapForm = document.getElementById("view_form");
map=window.open("","Map","status=0,title=0,height=600,width=800,scrollbars=1");
if (map) {
mapForm.submit();
} else {
alert('You must allow popups for this map to work.');
}
}
Полный код объясняется с указанием нормальной формы и элементов формы.