Je voudrais envoyer des données en utilisant un XMLHttpRequest en JavaScript.
Disons que j'ai le formulaire suivant en 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>
Comment puis-je écrire l'équivalent à l'aide d'un XMLHttpRequest en JavaScript?
javascript
ajax
post
xmlhttprequest
Jack Greenhill
la source
la source
params
lieu d'une chaîne comme dans jQuery?Connection
et les en-Content-Length
têtes ne peuvent pas être définis. Il indiquera "Refus de définir un en-tête non sécurisé" content-length "". Voir stackoverflow.com/a/2624167/632951application/json
demande?Ou si vous pouvez compter sur la prise en charge du navigateur, vous pouvez utiliser FormData :
la source
http.setRequestHeader("Content-length", params.length);
ethttp.setRequestHeader("Connection", "close");
. Sont-ils nécessaires? Sont-ils seulement nécessaires sur certains navigateurs? (Il y a un commentaire sur cette autre page disant que définir l'en-tête Content-Length était "exactement ce qui était nécessaire")Content-Type
change automatiquement enmultipart/form-data
. Cela a de sérieuses implications côté serveur et comment les informations y sont accessibles.Utilisez du JavaScript moderne!
Je suggérerais d'examiner
fetch
. C'est l'équivalent ES5 et utilise Promises. Il est beaucoup plus lisible et facilement personnalisable.Dans Node.js, vous devrez importer en
fetch
utilisant:Si vous souhaitez l'utiliser de manière synchrone (ne fonctionne pas dans la portée supérieure):
Plus d'informations:
Documentation de Mozilla
Puis-je utiliser (95% mars 2020)
Tutoriel de David Walsh
la source
function()
exemples au cas où vous ne préféreriez pas=>
. Vous devez absolument utiliser JS moderne pour faciliter l'expérience du développeur. S'inquiéter d'un petit pourcentage de personnes bloquées sur IE n'en vaut la peine que si vous êtes une grande entreprisethis
mot clé. J'aime le mentionner, mais je déteste aussi secrètement les gens qui utilisentthis
et l'architecture d'héritage au lieu des usines fonctionnelles. Pardonnez-moi, je suis nœud.this
aussi la peste, et tout le monde devrait lirethis
.this
.Utilisation minimale de
FormData
pour soumettre une demande AJAXRemarques
Cela ne répond pas complètement à la question OP car cela oblige l'utilisateur à cliquer pour soumettre la demande. Mais cela peut être utile aux personnes qui recherchent ce type de solution simple.
Cet exemple est très simple et ne prend pas en charge la
GET
méthode. Si vous êtes intéressé par des exemples plus sophistiqués, veuillez consulter l'excellente documentation MDN . Voir aussi une réponse similaire à propos de XMLHttpRequest pour publier un formulaire HTML .Limitation de cette solution: comme souligné par Justin Blank et Thomas Munk (voir leurs commentaires),
FormData
n'est pas pris en charge par IE9 et inférieur, et le navigateur par défaut sur Android 2.3.la source
FormData
est supporté par de nombreux navigateurs sauf IE9 et Android 2.3 (et OperaMini mais ce dernier n'est pas largement utilisé). À la vôtre ;-)onsubmit="return submitForm(this);"
sinon l'utilisateur est redirigé vers l'URL dans la demande.false
. Sitrue
est retourné, la demande POST d'origine (indésirable) sera envoyée! Votre réponse est correcte, désolé pour la confusion.Assurez-vous que votre API backend peut analyser JSON.
Par exemple, dans Express JS:
la source
AUCUN PLUGIN NÉCESSAIRE!
Sélectionnez le code ci-dessous et faites-le glisser dans la BARRE DE SIGNETS ( si vous ne le voyez pas, activez-le dans les paramètres du navigateur ), puis MODIFIEZ ce lien:
C'est tout! Vous pouvez maintenant visiter n'importe quel site Web et cliquer sur ce bouton dans la BARRE DE SIGNETS !
REMARQUE:
La méthode ci-dessus envoie des données à l'aide de la
XMLHttpRequest
méthode, vous devez donc être sur le même domaine lors du déclenchement du script. C'est pourquoi je préfère envoyer des données avec une soumission de formulaire simulée, qui peut envoyer le code à n'importe quel domaine - voici le code pour cela:la source
XmlHttpRequest
dans votre réponse: |J'ai rencontré un problème similaire, en utilisant le même message et et ce lien, j'ai résolu mon problème.
Ce lien a complété les informations.
la source
la source
Essayez d'utiliser l'objet json au lieu de formdata. ci-dessous est le code qui fonctionne pour moi. formdata ne fonctionne pas non plus pour moi, c'est pourquoi j'ai trouvé cette solution.
la source
Juste pour les lecteurs de fonctionnalité qui trouvent cette question. J'ai trouvé que la réponse acceptée fonctionne bien tant que vous avez un chemin donné, mais si vous le laissez vide, il échouera dans IE. Voici ce que j'ai trouvé:
Vous pouvez vous comme ça:
la source
Il y a des doublons qui touchent à cela, et personne ne l'explique vraiment. Je vais emprunter l'exemple de réponse accepté pour illustrer
J'ai simplifié à l'extrême (j'utilise
http.onload(function() {})
place de l'ancienne méthodologie de cette réponse) à des fins d'illustration. Si vous l'utilisez telkey=value
quel , vous constaterez que votre serveur interprète probablement le corps du POST comme une chaîne et non comme des paramètres réels (c'est-à-dire que PHP n'affichera aucune$_POST
variable). Vous devez passer l'en-tête du formulaire pour l'obtenir et le faire avanthttp.send()
Si vous utilisez JSON et non des données encodées URL, passez à la
application/json
placela source
Cela m'a aidé car je voulais utiliser uniquement
xmlHttpRequest
et publier un objet en tant que données de formulaire:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
la source