Ich möchte einige Daten mit einem XMLHttpRequest in JavaScript senden.
Angenommen, ich habe das folgende Formular in HTML:
<form name="inputform" action="somewhere" method="post">
<input type="hidden" value="person" name="user">
<input type="hidden" value="password" name="pwd">
<input type="hidden" value="place" name="organization">
<input type="hidden" value="key" name="requiredkey">
</form>
Wie kann ich das Äquivalent mit einem XMLHttpRequest in JavaScript schreiben?
javascript
ajax
post
xmlhttprequest
Jack Greenhill
quelle
quelle
params
anstelle einer Zeichenfolge wie in jQuery einzusenden ?Connection
undContent-Length
Header können nicht gesetzt werden. Es wird "Weigert sich, den unsicheren Header auf" Inhaltslänge "zu setzen" angezeigt. Siehe stackoverflow.com/a/2624167/632951application/json
Anfrage zu senden ?Wenn Sie sich auf die Browserunterstützung verlassen können, können Sie FormData verwenden :
quelle
http.setRequestHeader("Content-length", params.length);
undhttp.setRequestHeader("Connection", "close");
. Werden sie gebraucht? Werden sie vielleicht nur in bestimmten Browsern benötigt? (Es gibt einen Kommentar auf dieser anderen Seite, der besagt, dass das Setzen des Content-Length-Headers "genau das war, was benötigt wurde")Content-Type
automatisch ändertmultipart/form-data
. Dies hat schwerwiegende Auswirkungen auf die Serverseite und darauf, wie auf die Informationen dort zugegriffen wird.Verwenden Sie modernes JavaScript!
Ich würde vorschlagen, nachzuschauen
fetch
. Es ist das ES5-Äquivalent und verwendet Versprechen. Es ist viel besser lesbar und leicht anpassbar.In Node.js müssen Sie Folgendes importieren
fetch
:Wenn Sie es synchron verwenden möchten (funktioniert nicht im oberen Bereich):
Mehr Info:
Mozilla-Dokumentation
Kann ich verwenden (95% März 2020)
David Walsh Tutorial
quelle
function()
Beispiele hinzugefügt, falls Sie es nicht bevorzugen=>
. Sie sollten unbedingt modernes JS verwenden, um die Entwicklererfahrung zu vereinfachen. Sich um einen kleinen Prozentsatz der Leute zuthis
Schlüsselwort. Ich möchte das erwähnen, aber ich hasse auch heimlich Leute, diethis
Architektur und Vererbungsarchitektur anstelle von Funktionsfabriken verwenden. Vergib mir, ich bin Knoten.this
die Pest, und so sollte es auch jeder lesenthis
.this
.Minimale Verwendung von
FormData
, um eine AJAX-Anfrage zu sendenBemerkungen
Dadurch wird die OP-Frage nicht vollständig beantwortet, da der Benutzer klicken muss, um die Anforderung zu senden. Dies kann jedoch für Personen nützlich sein, die nach einer solchen einfachen Lösung suchen.
Dieses Beispiel ist sehr einfach und unterstützt die
GET
Methode nicht. Wenn Sie an anspruchsvolleren Beispielen interessiert sind, schauen Sie sich bitte die hervorragende MDN-Dokumentation an . Siehe auch ähnliche Antwort zu XMLHttpRequest zum Posten von HTML-Formularen .Einschränkung dieser Lösung: Wie von Justin Blank und Thomas Munk (siehe ihre Kommentare) hervorgehoben,
FormData
wird sie von IE9 und niedriger und dem Standardbrowser unter Android 2.3 nicht unterstützt.quelle
FormData
dies von vielen Browsern außer IE9 und Android 2.3 (und OperaMini, aber letzteres ist nicht weit verbreitet) unterstützt wird. Prost ;-)onsubmit="return submitForm(this);"
der Benutzer ansonsten zur URL in der Anforderung umgeleitet wird.false
. Beitrue
Rücksendung wird die ursprüngliche (unerwünschte) POST-Anfrage gesendet! Ihre Antwort ist richtig, entschuldigen Sie die Verwirrung.Stellen Sie sicher, dass Ihre Backend-API JSON analysieren kann.
Zum Beispiel in Express JS:
quelle
KEINE PLUGINS BENÖTIGT!
Wählen Sie den Code unten und ziehen Sie, dass in in der Lesezeichenleiste ( wenn Sie es nicht sehen, aktivieren Sie auf dem Browser - Einstellungen ), dann EDIT dass Link:
Das ist alles! Jetzt können Sie jede Website besuchen und auf diese Schaltfläche in der BOOKMARK BAR klicken !
HINWEIS:
Die obige Methode sendet Daten mit der
XMLHttpRequest
Methode. Sie müssen sich also beim Auslösen des Skripts in derselben Domäne befinden. Deshalb sende ich lieber Daten mit einem simulierten FORMULAR, das den Code an jede Domain senden kann - hier ist der Code dafür:quelle
XmlHttpRequest
in Ihrer Antwort: |Ich habe ein ähnliches Problem mit demselben Beitrag und diesem Link. Ich habe mein Problem behoben.
Dieser Link hat Informationen vervollständigt.
quelle
quelle
Versuchen Sie, ein json-Objekt anstelle von Formulardaten zu verwenden. Unten ist der Code, der für mich funktioniert. formdata funktioniert auch bei mir nicht, daher habe ich diese Lösung gefunden.
quelle
Nur für Feature-Reader, die diese Frage finden. Ich habe festgestellt, dass die akzeptierte Antwort einwandfrei funktioniert, solange Sie einen bestimmten Pfad haben. Wenn Sie ihn jedoch leer lassen, schlägt er im IE fehl. Folgendes habe ich mir ausgedacht:
Du kannst es dir so gefallen:
quelle
Es gibt einige Duplikate, die dies berühren, und niemand erklärt es wirklich. Ich werde das akzeptierte Antwortbeispiel zur Veranschaulichung ausleihen
Ich habe dies
http.onload(function() {})
zur Veranschaulichung zu stark vereinfacht (ich verwende anstelle der älteren Methodik dieser Antwort). Wenn Sie dies so verwenden, wie es ist, werden Sie feststellen, dass Ihr Server den POST-Text wahrscheinlich als Zeichenfolge und nicht als tatsächlichekey=value
Parameter interpretiert (dh PHP zeigt keine$_POST
Variablen an). Sie müssen den Formular-Header übergeben, um das zu erhalten, und das vorher tunhttp.send()
Wenn Sie JSON und keine URL-codierten Daten verwenden, übergeben Sie
application/json
stattdessenquelle
Dies hat mir geholfen, da ich nur
xmlHttpRequest
ein Objekt als Formulardaten verwenden und veröffentlichen wollte:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
quelle