Mit der window.open-Methode öffne ich eine neue Site mit Parametern, die ich per Post-Methode übergeben muss. Ich habe eine Lösung gefunden, aber leider funktioniert sie nicht. Das ist mein Code:
<script type="text/javascript">
function openWindowWithPost(url,name,keys,values)
{
var newWindow = window.open(url, name);
if (!newWindow) return false;
var html = "";
html += "<html><head></head><body><form id='formid' method='post' action='" + url +"'>";
if (keys && values && (keys.length == values.length))
for (var i=0; i < keys.length; i++)
html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";
html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</sc"+"ript></body></html>";
newWindow.document.write(html);
return newWindow;
}
</script>
Als nächstes erstelle ich Arrays:
<script type="text/javascript">
var values= new Array("value1", "value2", "value3")
var keys= new Array("a","b","c")
</script>
Und rufen Sie die Funktion auf von:
<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />
Wenn ich jedoch auf diese Schaltfläche klicke, ist die Site test.asp leer (natürlich versuche ich, Pass-Werte abzurufen - Request.Form("b")
).
Wie könnte ich dieses Problem lösen, warum kann ich keine Passwerte erhalten?
javascript
luk4443
quelle
quelle
Antworten:
Anstatt ein Formular in das neue Fenster zu schreiben (was mit der Kodierung von Werten im HTML-Code schwierig zu korrigieren ist), öffnen Sie einfach ein leeres Fenster und senden Sie ein Formular daran.
Beispiel:
Bearbeiten:
So legen Sie die Werte im Formular dynamisch fest:
Um das Formular zu veröffentlichen, rufen Sie die Funktion mit den Werten wie auf
openWindowWithPost('a','b','c');
.Hinweis: Ich habe die Parameternamen in Bezug auf die Formularnamen variiert, um zu zeigen, dass sie nicht identisch sein müssen. Normalerweise würden Sie sie ähnlich halten, um die Verfolgung der Werte zu vereinfachen.
quelle
action
Eigenschaft des Formulars ein.target="_blank"
?_blank
.Da Sie das gesamte Formular im Javascript haben möchten, anstatt es in Tags zu schreiben, können Sie Folgendes tun:
quelle
Obwohl ich 3 Jahre zu spät bin, aber um Guffas Beispiel zu vereinfachen, müssen Sie das Formular überhaupt nicht auf der Seite haben:
Bearbeitet:
Vielleicht ein hilfreicher Tipp für jemanden :)
quelle
$("body").append(form);
es nicht funktionieren.remove()
nach Jonathans Vorschlag hinzufügen.appendTo('body').submit()
, bereinigen Sie sogar nach sich selbst und überladen die aktuelle Seite nicht mit Formularobjekten.Ich stimme der oben veröffentlichten Antwort des Söldners voll und ganz zu und habe diese Funktion für mich erstellt, die für mich funktioniert. Es ist keine Antwort, es ist ein Kommentar zum obigen Beitrag von Söldner
quelle
Sie können einfach
target="_blank"
auf dem Formular verwenden.Fügen Sie versteckte Eingaben nach Ihren Wünschen hinzu und senden Sie das Formular einfach mit JS.
quelle
window.open
würde da als Popup blockiert, wenn es nicht in einemclick
Handler (oder einem vom Benutzer ausgelösten Ereignis wie diesem) aufgerufen wirdIch habe eine Funktion zum Generieren eines Formulars erstellt, das auf URL, Ziel und einem Objekt als
POST
/GET
data- und submit-Methode basiert . Es unterstützt verschachtelte und gemischte Typen in diesem Objekt, sodass jede Struktur, die Sie füttern, vollständig repliziert werden kann: PHP analysiert sie automatisch und gibt sie als verschachteltes Array zurück. Es gibt jedoch eine einzige Einschränkung: Die Klammern[
und]
dürfen nicht Teil eines Schlüssels im Objekt sein (wie{"this [key] is problematic" : "hello world"}
). Wenn jemand weiß, wie er richtig entkommen kann, sagen Sie es bitte!Hier ist ohne weiteres die Quelle:
Code-Snippet anzeigen
Anwendungsbeispiel:
quelle
Ich habe eine bessere Möglichkeit gefunden, Parameter an das Popup-Fenster zu übergeben und sogar Parameter daraus abzurufen:
Auf der Hauptseite:
Im Popup-Fenster:
Das ist es !
Und das ist sehr praktisch, weil:
Habe Spaß!
quelle
window.opener
Wird nicht von allen Browsern unterstützt.Ich wollte dies in React mit einfachen Js und der Abruf- Polyfüllung tun . OP hat nicht gesagt, dass er speziell ein Formular erstellen und die Submit-Methode darauf aufrufen möchte. Deshalb habe ich die Formularwerte als json veröffentlicht:
quelle
Die Standardübermittlungsaktion ist Ext.form.action.Submit, die eine Ajax-Anforderung verwendet, um die Werte des Formulars an eine konfigurierte URL zu senden. Verwenden Sie die Konfigurationsoption standardSubmit, um die normale Browserübermittlung eines Ext-Formulars zu aktivieren.
Link: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit
Lösung: Setzen Sie standardSubmit: true in Ihre Konfiguration. Hoffe das hilft dir :)
quelle
Ich habe dies in der Vergangenheit verwendet, da wir normalerweise die Rasierersyntax zum Codieren verwenden
{
// füge verstecktes und hier abgelegtes Formular hinzu
}}
quelle