Pergunta

Eu tenho uma página da Web que usa página cruz postagem para postar em uma página de destino diferente.

Um novo requisito surgiu o que significa que poderia haver 4 páginas de destino diferentes para postar muito dependendo do que dados foram inseridos no cliente.

É possível alterar de alguma forma o alvo página postagem cruzada dinamicamente no cliente?

De olhar para o html fonte que eu acho que seria possível usar jQuery para manipular o alvo postback no botão enviar, mas isso parece um pouco de um hack.

Quais são as minhas alternativas, reescrever as páginas para remover postagem entre páginas e fazer um redirecionamento de resposta passar os dados em sessão?

Foi útil?

Solução

Sim, você certamente pode mudar o action do formulário. Eu vou levá-lo através de como fazê-lo.

Em primeiro lugar, o formulário deve ter um nome e um URL de ação especificada no HTML:

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

Em seguida, você vai querer executar alguns JavaScript no envio do formulário, então você deve definir a propriedade onClick do botão submeter a uma função, como a seguir:

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

Finalmente é a sua função JavaScript para realmente mudar a ação do formulário e enviar o formulário.

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

Note que na última etapa onde nós return true, este envia o formulário, porque o tipo do elemento de entrada é submit ea função é acionado pelo evento onClick. Se este fosse, por exemplo, um elemento input type button, ou um tag a ou img em seguida, seria preciso acionar o formulário para enviar usando algo como o seguinte:

document.aformiam.submit();

Esta solução irá trabalhar para mudar a ação e se submeter a um única URL. Se você precisa postar em vários URLs de uma vez, você vai ter que fazer uso de outros métodos, como XMLHttpRequest. Se este for o caso, postar um comentário indicando assim e eu vou dar um exemplo para isso.

Outras dicas

Você pode tentar mudar o atributo action do seu formulário usando JavaScript, pouco antes de envio do formulário.

Infelizmente, a maioria dos navegadores não suportam o redirecionamento de POST. Mesmo RFC notas :

RFC 1945 e RFC 2068 especificar que o cliente não é permitido para alterar o método da solicitação redirecionada. No entanto, a maioria implementações agente de utilizador existentes tratar 302 como se fosse um 303 resposta, realizando um GET no campo de valor Localização independentemente do método de solicitação original. Os códigos de status 303 e 307 têm foi adicionado para servidores que desejam fazer inequivocamente que tipo de reação se espera do cliente.

Assim, IMHO, as escolhas estão limitadas a qualquer modificação action ou re-postagem de dados de JavaScript do seu servidor (o servidor aceita os dados postados, analisa e executa POST por si só).

O armazenamento de dados em sessão (ou simplesmente devolvê-lo no POST) e, em seguida, re-publicá-la a partir do cliente requer suporte JavaScript (para enviar automaticamente o formulário) ou fazer o usuário clicar em "enviar" botão mais uma vez. Você pode considerar usar este método como um retorno, no entanto.

Faça ponto action padrão para o script de reversão. Se você conseguiu modificar action antes da apresentação - tudo está bem neste momento. Se algo falhou, como no caso de JavaScript que está sendo desativado -. Fazer a sua página de saída de script fallback com um campo de dados oculto (por isso não deve ser modificado mais) e visível botão enviar, dados postagem para um local apropriado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top