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方法没有实现forms遍及整个页面(页面上列出了与供应商名单的100个订单 – 我试图映射供应商)
我使用了上述的变体,而不是打印HTML我build立了一个表单,并提交给第三方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.'); }
谢谢php-b-grader 。 我改进了代码,没有必要使用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 – 目标
对于什么是值得的,这里是先前提供的封装在一个函数中的代码。
openWindowWithPost("http://www.example.com/index.php", { p: "view.map", coords: encodeURIComponent(coords) });
function定义:
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-grader!
在使用POST的window.open传递值的通用函数下面:
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.'); }}
即使这个问题很久以前,感谢所有帮助我解决类似问题的投入。 我也根据其他人的回答做了一些修改,并把多个input/贵重物体放入单个对象(json)中; 并希望这有助于某人。
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;
该代码帮助我满足了我的要求。
我已经做了一些修改,并使用我完成了这个表格。 这是我的代码 –
需要“forms”的“目标”属性 – 就是这样!
形成
<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.'); } }
完整的代码被解释为显示正常forms和表单元素。