Me gustaría enviar algunos datos usando un XMLHttpRequest en JavaScript.
Digamos que tengo el siguiente formulario 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>
¿Cómo puedo escribir el equivalente usando un XMLHttpRequest en JavaScript?
javascript
ajax
post
xmlhttprequest
Jack Greenhill
fuente
fuente

paramslugar de una cadena como en jQuery?Connectiony losContent-Lengthencabezados no se pueden establecer. Dirá "Se negó a configurar el encabezado inseguro" content-length "". Ver stackoverflow.com/a/2624167/632951application/jsonsolicitud?O si puede contar con el soporte del navegador, puede usar FormData :
fuente
http.setRequestHeader("Content-length", params.length);yhttp.setRequestHeader("Connection", "close");. ¿Son necesarios? ¿Acaso solo se necesitan en ciertos navegadores? (Hay un comentario en esa otra página que dice que configurar el encabezado Content-Length era "exactamente lo que se necesitaba")Content-Typecambia automáticamentemultipart/form-data. Esto tiene serias implicaciones en el lado del servidor y cómo se accede a la información allí.¡Utiliza JavaScript moderno!
Sugeriría investigar
fetch. Es el equivalente de ES5 y utiliza Promesas. Es mucho más legible y fácilmente personalizable.En Node.js, deberá importar
fetchutilizando:Si desea usarlo sincrónicamente (no funciona en el alcance superior):
Más información:
Documentación de Mozilla
¿Puedo usar (95% Mar 2020)
Tutorial de David Walsh
fuente
function()ejemplos en caso de que no lo prefieras=>. Absolutamente debería estar utilizando JS moderno para facilitar la experiencia del desarrollador. Preocuparse por un pequeño porcentaje de personas atrapadas en IE no vale la pena a menos que sea una gran empresathispalabra clave. Me gusta mencionar eso, pero también odio en secreto a las personas que usan lathisarquitectura de herencia en lugar de las fábricas de funciones. Perdóname, soy nodo.thisla peste, y cualquiera debería leerthis.this.Uso mínimo de
FormDatapara enviar una solicitud AJAXObservaciones
Esto no responde completamente la pregunta de OP porque requiere que el usuario haga clic para enviar la solicitud. Pero esto puede ser útil para las personas que buscan este tipo de solución simple.
Este ejemplo es muy simple y no admite el
GETmétodo. Si le interesan los ejemplos más sofisticados, eche un vistazo a la excelente documentación de MDN . Consulte también una respuesta similar sobre XMLHttpRequest para publicar un formulario HTML .Limitación de esta solución: como señalaron Justin Blank y Thomas Munk (ver sus comentarios),
FormDatano es compatible con IE9 y versiones anteriores, y el navegador predeterminado en Android 2.3.fuente
FormDataes compatible con muchos navegadores, excepto IE9 y Android 2.3 (y OperaMini, pero este último no se usa ampliamente). Saludos ;-)onsubmit="return submitForm(this);"contrario, el usuario será redirigido a la URL en la solicitud.false. Sitruese devuelve, se enviará la solicitud POST original (no deseada). Su respuesta es correcta, perdón por la confusión.Asegúrese de que su API de backend pueda analizar JSON.
Por ejemplo, en Express JS:
fuente
¡NO SE NECESITAN PLUGINS!
Seleccione el siguiente código y arrástrelo a BOOKMARK BAR ( si no lo ve, habilítelo desde la Configuración del navegador ), luego EDITE ese enlace:
¡Eso es todo! ¡Ahora puede visitar cualquier sitio web y hacer clic en ese botón en BOOKMARK BAR !
NOTA:
El método anterior envía datos utilizando el
XMLHttpRequestmétodo, por lo tanto, debe estar en el mismo dominio mientras activa el script. Es por eso que prefiero enviar datos con un ENVÍO DE FORMULARIO simulado, que puede enviar el código a cualquier dominio; aquí hay un código para eso:fuente
XmlHttpRequesten su respuesta: |Me he enfrentado a un problema similar, usando la misma publicación y en este enlace he resuelto mi problema.
Este enlace ha completado la información.
fuente
fuente
Intente utilizar el objeto json en lugar de formdata. a continuación está el código que funciona para mí. formdata tampoco funciona para mí, por lo tanto, se me ocurrió esta solución.
fuente
Solo para lectores destacados que encuentren esta pregunta. Descubrí que la respuesta aceptada funciona bien siempre que tenga una ruta determinada, pero si la deja en blanco, fallará en IE. Esto es lo que se me ocurrió:
Puedes hacerlo así:
fuente
Hay algunos duplicados que tocan esto, y nadie realmente lo explica. Tomaré prestado el ejemplo de respuesta aceptado para ilustrar
Simplifiqué esto en exceso (uso en
http.onload(function() {})lugar de la metodología anterior de esa respuesta) en aras de la ilustración. Si usa esto tal cual, encontrará que su servidor probablemente está interpretando el cuerpo POST como una cadena y no comokey=valueparámetros reales (es decir, PHP no mostrará ninguna$_POSTvariable). Usted debe pasar la cabecera del formulario de conseguir eso, y hacerlo anteshttp.send()Si está utilizando JSON y no datos codificados en URL, pase en su
application/jsonlugarfuente
Esto me ayudó, ya que solo quería usar
xmlHttpRequesty publicar un objeto como datos de formulario:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
fuente