Pregunta

Tengo una página web que utiliza la publicación de páginas cruzadas para publicar en una página de destino diferente.

Ha surgido un nuevo requisito que significa que podría haber 4 páginas de destino diferentes para publicar también dependiendo de los datos que se ingresaron en el cliente.

¿Es posible cambiar de alguna manera el objetivo de publicación de páginas cruzadas dinámicamente en el cliente?

Al mirar el código fuente HTML, supongo que sería posible usar jquery para manipular el objetivo de devolución de datos en el botón de envío, pero esto parece un poco pirateo.

¿Cuáles son mis alternativas, reescribir las páginas para eliminar la publicación entre páginas y hacer una redirección de respuesta pasando los datos en la sesión?

¿Fue útil?

Solución

Sí, ciertamente puede cambiar la acción del formulario. Te guiaré a través de cómo hacerlo.

Primero, su formulario debe tener un nombre y una URL de acción especificada en el HTML:

<form name="aformiam" method="post" action="/somewhere/to/go.php">

A continuación, querrá ejecutar JavaScript en el envío del formulario, por lo que debe establecer la propiedad onClick de su botón de envío en una función, como la siguiente:

<input type="submit" value="Send Form" onClick="return submitForm();" />

Finalmente, es su función JavaScript para cambiar realmente la acción del formulario y enviar el formulario.

function submitForm() {
  // do anything here you need to determine which URL to post to
  // I am just making an example here
  var targetURL = '/some/url/to/post.php';

  // now we will change the form's action
  document.aformiam.action = targetURL;

  // finally, submit the form by returning true
  return true;
}

Tenga en cuenta que en el último paso donde devolvemos verdadero, esto envía el formulario porque el tipo de elemento de entrada es submit y la función se activa por el evento onClick . Si esto fuera, por ejemplo, un elemento de entrada de tipo button , o una etiqueta a o img , entonces tendríamos que activar el formulario para enviar usando algo como lo siguiente:

document.aformiam.submit();

Esta solución funcionará para cambiar la acción y enviarla a una URL única . Si necesita publicar en varias URL a la vez, deberá utilizar otros métodos como XMLHttpRequest. Si este es el caso, publique un comentario que lo indique y le proporcionaré un ejemplo.

Otros consejos

Puede intentar cambiar el atributo action de su formulario utilizando JavaScript, justo antes del envío del formulario.

Desafortunadamente, la mayoría de los navegadores no son compatibles con la redirección POST. Incluso notas RFC :

  

RFC 1945 y RFC 2068 especifican que el cliente no está permitido   para cambiar el método en la solicitud redirigida. Sin embargo, la mayoría   Las implementaciones de agente de usuario existentes tratan 302 como si fuera un 303   respuesta, realizando un GET en el valor del campo Ubicación independientemente   del método de solicitud original. Los códigos de estado 303 y 307 tienen   agregado para servidores que desean dejar claro inequívocamente qué   tipo de reacción se espera del cliente.

Entonces, en mi humilde opinión, las opciones se limitan a la modificación action de JavaScript o a la re-publicación de datos desde su servidor (su servidor acepta los datos POSTed, los analiza y realiza la POST por sí mismo).

Almacenar datos en la sesión (o simplemente devolverlos en POST) y luego volver a publicarlos desde el cliente requiere soporte de JavaScript (para enviar automáticamente el formulario) o hacer que el usuario haga clic en "enviar". abotone una vez más. Sin embargo, puede considerar usar este método como alternativa.

Haga que la acción predeterminada apunte a su script de reserva. Si logró modificar action antes del envío, todo está bien en este momento. Si algo falla, como en el caso de que JavaScript esté deshabilitado, cree su página de salida de secuencia de comandos alternativa con un campo de datos ocultos (para que no se modifique más) y el botón de envío visible, PUBLICANDO datos en una ubicación adecuada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top