Estoy tratando de dirigir un navegador a una página diferente. Si quisiera una solicitud GET, podría decir
document.location.href = 'http://example.com/q=a';
Pero el recurso al que intento acceder no responderá correctamente a menos que use una solicitud POST. Si esto no fuera generado dinámicamente, podría usar el HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Entonces simplemente enviaría el formulario del DOM.
Pero realmente me gustaría un código JavaScript que me permita decir
post_to_url('http://example.com/', {'q':'a'});
¿Cuál es la mejor implementación de navegador cruzado?
Editar
Lo siento, no estaba claro. Necesito una solución que cambie la ubicación del navegador, al igual que enviar un formulario. Si esto es posible con XMLHttpRequest , no es obvio. Y esto no debe ser asíncrono, ni usar XML, por lo que Ajax no es la respuesta.
Respuestas:
Crear dinámicamente
<input>
s en un formulario y enviarloEjemplo:
EDITAR : Dado que esto se ha votado tanto, supongo que la gente va a copiar esto mucho. Así que agregué el
hasOwnProperty
cheque para corregir cualquier error inadvertido.fuente
Esta sería una versión de la respuesta seleccionada usando jQuery .
fuente
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Una implementación simple y rápida de la respuesta de @Aaron:
Por supuesto, debería usar un marco JavaScript como Prototype o jQuery ...
fuente
Usando la
createElement
función proporcionada en esta respuesta , que es necesaria debido a la ruptura de IE con el atributo de nombre en elementos creados normalmente condocument.createElement
:fuente
La respuesta de Rakesh Pai es sorprendente, pero hay un problema que se me ocurre (en Safari ) cuando intento publicar un formulario con un campo llamado
submit
. Por ejemplo,post_to_url("http://google.com/",{ submit: "submit" } );
. He parcheado ligeramente la función para caminar alrededor de esta colisión espacial variable.fuente
No. No puede tener la solicitud de publicación de JavaScript como un envío de formulario.
Lo que puede tener es un formulario en HTML, luego envíelo con JavaScript. (como se explica muchas veces en esta página).
Puede crear el HTML usted mismo, no necesita JavaScript para escribir el HTML. Eso sería una tontería si la gente sugiriera eso.
Su función simplemente configuraría el formulario de la manera que lo desee.
Luego, úsalo como.
Pero simplemente dejaría de lado la función y simplemente lo haría.
Finalmente, la decisión de estilo va en el archivo ccs.
Personalmente, creo que los formularios deben abordarse por nombre, pero eso no es importante en este momento.
fuente
Si tiene instalado Prototype , puede ajustar el código para generar y enviar el formulario oculto de esta manera:
fuente
Esta es la respuesta de Rakesh, pero con soporte para matrices (que es bastante común en los formularios):
Javascript simple:
oh, y aquí está la versión de jquery: (código ligeramente diferente, pero se reduce a lo mismo)
fuente
Una solución es generar el formulario y enviarlo. Una implementación es
Entonces puedo implementar un marcador de acortamiento de URL con un simple
fuente
Bueno, desearía haber leído todas las otras publicaciones para no perder tiempo creando esto a partir de la respuesta de Rakesh Pai. Aquí hay una solución recursiva que funciona con matrices y objetos. No depende de jQuery.
Se agregó un segmento para manejar casos en los que todo el formulario debe enviarse como una matriz. (es decir, donde no hay un objeto contenedor alrededor de una lista de elementos)
fuente
Tres opciones aquí.
Respuesta estándar de JavaScript: ¡Use un marco! La mayoría de los frameworks de Ajax le habrán abstraído una manera fácil de hacer una POST XMLHTTPRequest .
Realice la solicitud XMLHTTPRequest usted mismo, pasando la publicación al método abierto en lugar de get. (Más información en Uso del método POST en XMLHTTPRequest (Ajax)) .
A través de JavaScript, cree dinámicamente un formulario, agregue una acción, agregue sus entradas y envíela.
fuente
Iría por la ruta del Ajax como otros sugirieron con algo como:
fuente
La forma más fácil es usar Ajax Post Request:
dónde:
Luego, en el controlador de éxito, redirija el navegador con algo como window.location.
fuente
Así es como lo escribí usando jQuery. Probado en Firefox e Internet Explorer.
fuente
La biblioteca Prototype incluye un objeto Hashtable, con un método ".toQueryString ()", que le permite convertir fácilmente un objeto / estructura JavaScript en una cadena de estilo de cadena de consulta. Como la publicación requiere que el "cuerpo" de la solicitud sea una cadena con formato de cadena de consulta, esto permite que su solicitud de Ajax funcione correctamente como una publicación. Aquí hay un ejemplo usando Prototype:
fuente
Esto funciona perfectamente en mi caso:
Puede usarlo en funciones como:
Con esto, puede publicar todos los valores de las entradas.
fuente
Otra solución recursiva , ya que algunas de otras parecen estar rotas (no las probé todas). Este depende de lodash 3.xy ES6 (no se requiere jQuery):
fuente
Mi solución codificará objetos profundamente anidados, a diferencia de la solución actualmente aceptada por @RakeshPai.
Utiliza la biblioteca npm 'qs' y su función stringify para convertir objetos anidados en parámetros.
Este código funciona bien con un back-end de Rails, aunque debería poder modificarlo para que funcione con cualquier backend que necesite modificando las opciones pasadas a stringify. Rails requiere que arrayFormat se establezca en "corchetes".
Ejemplo:
Produce estos parámetros de Rails:
fuente
FormObject es una opción. Pero FormObject no es compatible con la mayoría de los navegadores ahora.
fuente
Esto es como la opción 2 de Alan (arriba). Cómo instanciar el httpobj se deja como ejercicio.
fuente
Esto se basa en el código de beauSD usando jQuery. Se mejora para que funcione de forma recursiva en los objetos.
fuente
Puede agregar dinámicamente el formulario usando DHTML y luego enviarlo.
fuente
Puede usar una biblioteca como jQuery y su método $ .post .
fuente
Uso el document.forms java y lo repito para obtener todos los elementos en el formulario, luego lo envío a través de xhttp. Entonces esta es mi solución para el envío de javascript / ajax (con todos los html incluidos como ejemplo):
fuente
Puede usar el método de activación de jQuery para enviar el formulario, al igual que presiona un botón, así,
se enviará en el navegador.
fuente
El método que uso para publicar y dirigir a un usuario automáticamente a otra página es simplemente escribir un formulario oculto y luego enviarlo automáticamente. Tenga la seguridad de que la forma oculta no ocupa absolutamente ningún espacio en la página web. El código sería algo como esto:
Solicitud de envío automático
Una aplicación de envío automático estaría dirigiendo valores de formulario que el usuario coloca automáticamente en la otra página de regreso a esa página. Tal aplicación sería así:
fuente
Así es como lo hago.
fuente
Ninguna de las soluciones anteriores manejó parámetros anidados profundos con solo jQuery, así que aquí está mi solución de dos centavos.
Si está utilizando jQuery y necesita manejar parámetros anidados profundos, puede usar esta función a continuación:
Aquí hay un ejemplo de cómo usarlo. El código html:
Y si hace clic en el botón de prueba, publicará el formulario y obtendrá los siguientes valores en POST:
Nota: si desea publicar el formulario en otra url que no sea la página actual, puede especificar la url como el segundo argumento de la función postForm.
Entonces, por ejemplo (para reutilizar su ejemplo):
Espero que esto ayude.
Nota 2: el código se tomó del complemento de redireccionamiento . Básicamente lo simplifiqué para mis necesidades.
fuente
Complemento jQuery para redirigir con POST o GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Para probar, incluya el archivo .js anterior o copie / pegue la clase en su código, luego use el código aquí, reemplazando "args" con sus nombres de variables y "valores" con los valores de esas variables respectivas:
fuente
Puede realizar una llamada AJAX (probablemente utilizando una biblioteca como Prototype.js o JQuery). AJAX puede manejar las opciones GET y POST.
fuente