Ich habe eine Javascript-Funktion, die window.open verwendet, um eine andere Seite aufzurufen und das Ergebnis zurückzugeben.
Hier ist der Abschnitt meines Codes:
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);
Mein Problem ist jetzt, dass ich zu viele Daten übergebe, damit das GET sie verarbeiten kann, und dass ich sie mit der POST-Methode übergeben muss.
Wie kann ich den obigen Code konvertieren, um die Seite mit der POST-Methode zu öffnen, ohne Formulare auf der gesamten Seite zu implementieren (auf der Seite werden Hunderte von Bestellungen mit einer Liste von Lieferanten aufgelistet - ich versuche, die Lieferanten zuzuordnen).
quelle
document.body.appendChild(mapForm);
ist hier überflüssig und kann sicher weggelassen werden, um DOM nicht zu überladen.Vielen Dank, dass Sie PHP-B-Grader . Ich habe den Code verbessert, es ist nicht notwendig, window.open () zu verwenden , das Ziel ist bereits im Formular angegeben .
// 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();
für Zieloptionen -> w3schools - Ziel
quelle
Hier ist der zuvor bereitgestellte Code, der in einer Funktion gekapselt ist.
openWindowWithPost("http://www.example.com/index.php", { p: "view.map", coords: encodeURIComponent(coords) });
Funktionsdefinition:
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); }
quelle
danke php-b-grader!
unterhalb der generischen Funktion für window.open-Durchlaufwerte mit 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.'); }}
quelle
Obwohl diese Frage schon lange her ist, danke ich allen für die Beiträge, die mir bei einem ähnlichen Problem geholfen haben. Ich habe auch ein bisschen Änderungen vorgenommen, basierend auf den Antworten der anderen hier und mehrere Eingaben / Wertsachen in ein einzelnes Objekt (json) gemacht. und hoffe das hilft jemandem.
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;
quelle
Der Code hat mir geholfen, meine Anforderung zu erfüllen.
Ich habe einige Änderungen vorgenommen und mit einem Formular dieses ausgefüllt. Hier ist mein Code-
Benötigen Sie ein 'Ziel'-Attribut für' Formular '- fertig!
Bilden
<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.'); } }
Der vollständige Code wird mit normaler Form und Formularelementen erläutert.
quelle