webentwicklung-frage-antwort-db.com.de

Übergebe Werte für Javascript window.open mit POST

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 Methode POST übergeben muss.

Wie kann ich den obigen Code konvertieren, um die Seite mit der Methode POST= ohne implementierte Formulare auf der ganzen Seite zu öffnen? Lieferanten)

60
php-b-grader

Ich habe eine Variation des oben genannten verwendet, aber anstatt HTML zu drucken, habe ich ein Formular erstellt und es an die URL eines Drittanbieters gesendet:

    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.');
}
65
php-b-grader

Vielen Dank php-b-grader. Ich habe den Code verbessert, es ist nicht notwendig window.open () zu verwenden, das Ziel ist bereits in der Form 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 - Target

39
Facundo Victor

Hier ist der zuvor bereitgestellte Code, der in eine Funktion eingeschlossen 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);
}
18
reformed

danke php-b-grader!

unter der generischen Funktion für window.open-Übergabewerte 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.');
}}
6
PeterPink

Auch wenn diese Frage schon vor langer Zeit gestellt wurde, vielen Dank für die Beiträge, die mir bei einem ähnlichen Problem geholfen haben. Ich habe auch einige Änderungen vorgenommen, die auf den Antworten der anderen basieren und mehrere Eingaben/Wertsachen in ein einzelnes Objekt (json) umwandeln. 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;
2
early

Der Code hat mir geholfen, meine Anforderung zu erfüllen.

Ich habe einige Änderungen vorgenommen und ein Formular verwendet, das ich ausgefüllt habe. Hier ist mein Code-

Benötigen Sie ein 'Ziel'-Attribut für' Form '?

Formular

<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 anhand der normalen Form und der Formularelemente erläutert.

1
Nikz