Domanda

Ho una pagina Web che utilizza la pubblicazione su più pagine per pubblicare su un'altra pagina di destinazione.

È emerso un nuovo requisito che significa che potrebbero essere presenti anche 4 diverse pagine target da pubblicare a seconda dei dati immessi sul client.

È possibile in qualche modo cambiare in modo dinamico il target di invio multipagina sul client?

Dall'esame del codice sorgente HTML credo che sarebbe possibile usare jquery per manipolare la destinazione postback sul pulsante di invio, ma questo sembra un po 'un trucco.

Quali sono le mie alternative, riscrivere le pagine per rimuovere la pubblicazione su più pagine ed eseguire un reindirizzamento della risposta passando i dati nella sessione?

È stato utile?

Soluzione

Sì, puoi sicuramente modificare azione del modulo. Ti guiderò attraverso come farlo.

Innanzitutto, il modulo deve avere un nome e un URL di azione specificati nell'HTML:

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

Successivamente, vorrai eseguire JavaScript sull'invio del modulo, quindi dovresti impostare la proprietà onClick del tuo pulsante di invio su una funzione, come la seguente:

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

Finalmente è la tua funzione JavaScript per cambiare effettivamente l'azione del modulo e inviare il modulo.

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;
}

Nota che nell'ultimo passaggio in cui restituiamo true, questo invia il modulo perché il tipo di elemento di input è submit e la funzione è attivata dall'evento onClick . Se questo fosse, ad esempio, un elemento di input di tipo button o un a o img , dovremmo attivare il modulo per inviare usando qualcosa come il seguente:

document.aformiam.submit();

Questa soluzione funzionerà per modificare l'azione e inviarla a un singolo URL. Se devi pubblicare post su più URL contemporaneamente, dovrai utilizzare altri metodi come XMLHttpRequest. In questo caso, pubblica un commento indicando così e ti fornirò un esempio.

Altri suggerimenti

Puoi provare a modificare l'attributo action del tuo modulo utilizzando JavaScript, appena prima dell'invio del modulo.

Sfortunatamente, la maggior parte dei browser non supporta il reindirizzamento POST. Anche note RFC :

  

RFC 1945 e RFC 2068 specificano che il client non è autorizzato   per cambiare il metodo sulla richiesta reindirizzata. Tuttavia, la maggior parte   le implementazioni degli user agent esistenti trattano 302 come se fosse un 303   risposta, eseguendo un GET sul valore del campo Posizione indipendentemente   del metodo di richiesta originale. I codici di stato 303 e 307 hanno   è stato aggiunto per i server che desiderano chiarire in modo inequivocabile quale   tipo di reazione atteso dal cliente.

Quindi, IMHO, le scelte sono limitate alla modifica JavaScript action o alla ripubblicazione dei dati dal tuo server (il tuo server accetta i dati POST, li analizza ed esegue il POST da solo).

L'archiviazione dei dati in sessione (o semplicemente la loro restituzione su POST) e la successiva ripubblicazione dal client richiede il supporto JavaScript (per inviare automaticamente il modulo) o fare clic su " submit " pulsante ancora una volta. Tuttavia, potresti considerare l'utilizzo di questo metodo come fallback.

Rendi azione predefinito puntato al tuo script di fallback. Se sei riuscito a modificare azione prima dell'invio, tutto va bene a questo punto. Se qualcosa non riesce, come nel caso in cui JavaScript sia disabilitato, crea la tua pagina di output dello script di fallback con un campo di dati nascosto (quindi non dovrebbe più essere modificato) e il pulsante di invio visibile, INVIO dei dati in una posizione corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top