tab - Javascript window.open pass values using POST
window.opener javascript ejemplo (6)
Aunque esta pregunta fue hace mucho tiempo, gracias a todos por las aportaciones que me ayudaron con un problema similar. También hice algunas modificaciones basadas en las respuestas de los otros aquí y haciendo múltiples entradas / objetos de valor en un solo objeto (json); y espero que esto ayude a alguien.
js:
//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;
Tengo una función de JavaScript que usa window.open para llamar a otra página y devolver el resultado.
Aquí está la sección de mi código:
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);
Mi problema ahora es que estoy transfiriendo mucha información para que GET la maneje y necesito pasarla usando el método POST.
¿Cómo puedo convertir el código anterior para abrir la página utilizando el método POST sin implementar formularios en toda la página (la página enumera 100 de los pedidos con una lista de proveedores? Estoy intentando asignar los proveedores)
El código me ayudó a cumplir mi requisito.
He hecho algunas modificaciones y usando un formulario lo complete. Aquí está mi código-
Necesita un atributo ''objetivo'' para ''forma'' - ¡eso es todo!
Formar
<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.'');
}
}
El código completo se explica mostrando la forma normal y los elementos del formulario.
Gracias php-b-grader . Mejoré el código, no es necesario usar window.open () , el objetivo ya está especificado en el formulario .
// 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();
para las opciones de destino -> w3schools - Target
Por lo que vale, aquí está el código provisto previamente encapsulado dentro de una función.
openWindowWithPost("http://www.example.com/index.php", {
p: "view.map",
coords: encodeURIComponent(coords)
});
Definición de la función:
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);
}
Usé una variación de lo anterior, pero en lugar de imprimir html, construí un formulario y lo envié a la URL de terceros:
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.'');
}
gracias php-b-grader!
debajo de la función genérica para window.open pass values using 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.'');
}}