Ich versuche, einen Browser auf eine andere Seite zu leiten. Wenn ich eine GET-Anfrage haben wollte, könnte ich sagen
document.location.href = 'http://example.com/q=a';
Die Ressource, auf die ich zugreifen möchte, reagiert jedoch nur dann ordnungsgemäß, wenn ich eine POST-Anforderung verwende. Wenn dies nicht dynamisch generiert würde, könnte ich den HTML-Code verwenden
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Dann würde ich einfach das Formular vom DOM einreichen.
Aber ich hätte wirklich gerne JavaScript-Code, mit dem ich sagen kann
post_to_url('http://example.com/', {'q':'a'});
Was ist die beste browserübergreifende Implementierung?
Bearbeiten
Es tut mir leid, dass ich nicht klar war. Ich brauche eine Lösung, die den Speicherort des Browsers ändert, genau wie das Senden eines Formulars. Wenn dies mit XMLHttpRequest möglich ist , ist dies nicht offensichtlich. Und dies sollte weder asynchron sein noch XML verwenden, daher ist Ajax nicht die Antwort.
Antworten:
Erstellen Sie
<input>
s dynamisch in einem Formular und senden Sie es abBeispiel:
EDIT : Da dies so sehr positiv bewertet wurde, schätze ich, dass die Leute dies viel kopieren werden. Also habe ich die
hasOwnProperty
Prüfung hinzugefügt , um versehentliche Fehler zu beheben.quelle
Dies wäre eine Version der ausgewählten Antwort mit jQuery .
quelle
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Eine einfache, schnelle und schmutzige Implementierung der @ Aaron-Antwort:
Natürlich sollten Sie lieber ein JavaScript-Framework wie Prototype oder jQuery verwenden ...
quelle
Verwenden der
createElement
in dieser Antwort angegebenen Funktion , die aufgrund der Zerbrochenheit des IE mit dem Namensattribut für Elemente erforderlich ist, die normalerweise mitdocument.createElement
folgenden Elementen erstellt wurden :quelle
Die Antwort von Rakesh Pai ist erstaunlich, aber es gibt ein Problem, das bei mir (in Safari ) auftritt, wenn ich versuche, ein Formular mit einem Feld namens zu veröffentlichen
submit
. Zum Beispielpost_to_url("http://google.com/",{ submit: "submit" } );
. Ich habe die Funktion leicht gepatcht, um diese variable Raumkollision zu umgehen.quelle
Nein. Sie können die JavaScript-Post-Anfrage nicht wie ein Formular senden lassen.
Was Sie haben können, ist ein Formular in HTML, und senden Sie es dann mit dem JavaScript. (wie oft auf dieser Seite erklärt).
Sie können den HTML-Code selbst erstellen. Sie benötigen kein JavaScript, um den HTML-Code zu schreiben. Das wäre dumm, wenn die Leute das vorschlagen würden.
Ihre Funktion würde das Formular nur so konfigurieren, wie Sie es möchten.
Dann benutze es wie.
Aber ich würde die Funktion einfach weglassen und einfach tun.
Schließlich geht die Stilentscheidung in die ccs-Datei.
Persönlich denke ich, dass Formulare namentlich angesprochen werden sollten, aber das ist momentan nicht wichtig.
quelle
Wenn Sie Prototype installiert haben, können Sie den Code straffen, um das versteckte Formular wie folgt zu generieren und zu senden:
quelle
Dies ist die Antwort von Rakesh, aber mit Unterstützung für Arrays (was in Formen durchaus üblich ist):
einfaches Javascript:
Oh, und hier ist die jquery-Version: (etwas anderer Code, läuft aber auf dasselbe hinaus)
quelle
Eine Lösung besteht darin, das Formular zu generieren und einzureichen. Eine Implementierung ist
So kann ich mit einem einfachen ein URL-Verkürzungs-Lesezeichen implementieren
quelle
Ich wünschte, ich hätte alle anderen Beiträge gelesen, damit ich keine Zeit verlieren würde, dies aus Rakesh Pais Antwort zu erstellen. Hier ist eine rekursive Lösung, die mit Arrays und Objekten funktioniert. Keine Abhängigkeit von jQuery.
Es wurde ein Segment hinzugefügt, um Fälle zu behandeln, in denen das gesamte Formular wie ein Array gesendet werden soll. (dh wo es kein Wrapper-Objekt um eine Liste von Elementen gibt)
quelle
Drei Möglichkeiten hier.
Standard JavaScript Antwort: Verwenden Sie ein Framework! Die meisten Ajax-Frameworks haben Sie auf einfache Weise abstrahiert, um einen XMLHTTPRequest- POST zu erstellen .
Stellen Sie die XMLHTTPRequest-Anforderung selbst und übergeben Sie den Beitrag an die open-Methode, anstatt get. (Weitere Informationen finden Sie unter Verwenden der POST-Methode in XMLHTTPRequest (Ajax) .)
Erstellen Sie über JavaScript dynamisch ein Formular, fügen Sie eine Aktion hinzu, fügen Sie Ihre Eingaben hinzu und senden Sie diese.
quelle
Ich würde den Ajax-Weg gehen, wie andere vorgeschlagen hatten, mit:
quelle
Der einfachste Weg ist die Verwendung von Ajax Post Request:
wo:
Leiten Sie dann im Success-Handler den Browser mit so etwas wie window.location um.
quelle
So habe ich es mit jQuery geschrieben. Getestet in Firefox und Internet Explorer.
quelle
Die Prototypbibliothek enthält ein Hashtable-Objekt mit der Methode ".toQueryString ()", mit der Sie ein JavaScript-Objekt / eine JavaScript-Struktur einfach in eine Zeichenfolge im Stil einer Abfragezeichenfolge umwandeln können. Da für den Beitrag der "Hauptteil" der Anforderung eine mit einer Abfragezeichenfolge formatierte Zeichenfolge sein muss, kann Ihre Ajax-Anforderung ordnungsgemäß als Beitrag verwendet werden. Hier ist ein Beispiel mit Prototype:
quelle
Das funktioniert in meinem Fall perfekt:
Sie können es in folgenden Funktionen verwenden:
Hiermit können Sie alle Werte von Eingaben veröffentlichen.
quelle
Noch eine rekursive Lösung, da einige von anderen kaputt zu sein scheinen (ich habe nicht alle getestet). Dieser hängt von lodash 3.x und ES6 ab (jQuery nicht erforderlich):
quelle
Meine Lösung codiert tief verschachtelte Objekte, im Gegensatz zu der derzeit von @RakeshPai akzeptierten Lösung.
Es verwendet die 'qs' npm-Bibliothek und ihre Stringify-Funktion, um verschachtelte Objekte in Parameter umzuwandeln.
Dieser Code funktioniert gut mit einem Rails-Backend, obwohl Sie ihn ändern sollten, um mit jedem benötigten Backend zu arbeiten, indem Sie die an stringify übergebenen Optionen ändern. Für Rails muss arrayFormat auf "Klammern" gesetzt sein.
Beispiel:
Erzeugt diese Rails-Parameter:
quelle
FormObject ist eine Option. Aber FormObject wird derzeit von den meisten Browsern nicht unterstützt.
quelle
Dies ist wie Alans Option 2 (oben). Wie man den httpobj instanziiert, bleibt als Übung übrig.
quelle
Dies basiert auf dem Code von beauSD mit jQuery. Es wurde verbessert, sodass es rekursiv für Objekte funktioniert.
quelle
Sie können das Formular dynamisch mit DHTML hinzufügen und dann senden.
quelle
Sie können eine Bibliothek wie jQuery und die Methode $ .post verwenden .
quelle
Ich benutze das document.forms Java und schleife es, um alle Elemente im Formular zu erhalten, und sende es dann über xhttp. Das ist also meine Lösung für Javascript / Ajax Submit (mit allem HTML als Beispiel):
quelle
Sie können die Trigger-Methode von jQuery verwenden, um das Formular zu senden, genau wie Sie eine Taste drücken.
es wird im Browser gesendet.
quelle
Die Methode, mit der ich einen Benutzer automatisch poste und auf eine andere Seite leite, besteht darin, einfach ein verstecktes Formular zu schreiben und es dann automatisch zu senden. Seien Sie versichert, dass das versteckte Formular absolut keinen Platz auf der Webseite einnimmt. Der Code wäre ungefähr so:
Anwendung der automatischen Übermittlung
Eine Anwendung einer automatischen Übermittlung würde Formularwerte, die der Benutzer automatisch auf der anderen Seite eingibt, auf diese Seite zurückleiten. Eine solche Anwendung wäre wie folgt:
quelle
Hier ist, wie ich es mache.
quelle
Keine der oben genannten Lösungen hat tief verschachtelte Parameter nur mit jQuery verarbeitet. Hier ist meine Zwei-Cent-Lösung.
Wenn Sie jQuery verwenden und tief verschachtelte Parameter verarbeiten müssen, können Sie die folgende Funktion verwenden:
Hier ist ein Beispiel für die Verwendung. Der HTML-Code:
Wenn Sie auf die Schaltfläche Test klicken, wird das Formular veröffentlicht und in POST werden die folgenden Werte angezeigt:
Hinweis: Wenn Sie das Formular an eine andere URL als die aktuelle Seite senden möchten, können Sie die URL als zweites Argument der Funktion postForm angeben.
Also zum Beispiel (um Ihr Beispiel wiederzuverwenden):
Hoffe das hilft.
Hinweis 2: Der Code wurde aus dem Redirect-Plugin übernommen . Ich habe es im Grunde nur für meine Bedürfnisse vereinfacht.
quelle
jQuery-Plugin zur Umleitung mit POST oder GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Fügen Sie zum Testen die obige .js-Datei hinzu oder kopieren / fügen Sie die Klasse in Ihren Code ein. Verwenden Sie dann den Code hier und ersetzen Sie "args" durch Ihre Variablennamen und "values" durch die Werte der jeweiligen Variablen:
quelle
Sie können einen AJAX-Aufruf tätigen (wahrscheinlich mithilfe einer Bibliothek wie Prototype.js oder JQuery). AJAX kann sowohl GET- als auch POST-Optionen verarbeiten.
quelle