Com o método window.open abro um novo site com parâmetros, que tenho que passar pelo método post. Encontrei a solução, mas infelizmente não funciona. Este é o meu código:
<script type="text/javascript">
function openWindowWithPost(url,name,keys,values)
{
var newWindow = window.open(url, name);
if (!newWindow) return false;
var html = "";
html += "<html><head></head><body><form id='formid' method='post' action='" + url +"'>";
if (keys && values && (keys.length == values.length))
for (var i=0; i < keys.length; i++)
html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";
html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</sc"+"ript></body></html>";
newWindow.document.write(html);
return newWindow;
}
</script>
Em seguida, crio matrizes:
<script type="text/javascript">
var values= new Array("value1", "value2", "value3")
var keys= new Array("a","b","c")
</script>
E chamar a função por:
<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />
Mas, quando clico neste botão, o site test.asp está vazio (é claro que tento obter valores de aprovação - Request.Form("b")
).
Como eu poderia resolver esse problema, por que não consigo passar valores?
javascript
luk4443
fonte
fonte
Respostas:
Em vez de escrever um formulário na nova janela (o que é difícil de corrigir, com codificação de valores no código HTML), basta abrir uma janela vazia e postar um formulário nela.
Exemplo:
Editar:
Para definir os valores no formulário dinamicamente, você pode fazer assim:
Para postar o formulário você chama a função com os valores, como
openWindowWithPost('a','b','c');
.Nota: Eu variei os nomes dos parâmetros em relação aos nomes dos formulários para mostrar que eles não precisam ser iguais. Normalmente, você os manteria semelhantes uns aos outros para tornar mais simples o rastreamento dos valores.
fonte
action
propriedade do formulário.target="_blank"
?_blank
.Como você queria todo o formulário dentro do javascript, em vez de escrevê-lo em tags, você pode fazer isso:
fonte
Mesmo que eu esteja 3 anos atrasado, mas para simplificar o exemplo de Guffa, você nem precisa ter o formulário na página:
Editado:
Talvez uma dica útil para alguém :)
fonte
$("body").append(form);
não funcionará.remove()
após a sugestão de Jonathan.appendTo('body').submit()
, você mesmo limpará sua própria imagem e não confundirá a página atual com objetos de formulário.Eu concordo totalmente com a resposta do mercenário postada acima e criei esta função para mim que funciona para mim. Não é uma resposta, é um comentário na postagem acima do mercenário
fonte
Você pode simplesmente usar
target="_blank"
no formulário.Adicione entradas ocultas da maneira que preferir e, a seguir, simplesmente envie o formulário com JS.
fonte
window.open
seria bloqueado como um pop-up, quando não fosse chamado dentro de umclick
manipulador (ou qualquer evento disparado pelo usuário como esse)Criei uma função para gerar um formulário, baseado em url, destino e um objeto como o método
POST
/GET
data e submit. Ele suporta tipos aninhados e mistos dentro desse objeto, portanto, pode replicar totalmente qualquer estrutura que você alimenta: o PHP automaticamente analisa e retorna como um array aninhado. No entanto, há uma única restrição: os colchetes[
e]
não devem fazer parte de nenhuma chave no objeto (como{"this [key] is problematic" : "hello world"}
). Se alguém souber como escapar adequadamente, diga!Sem mais delongas, aqui está a fonte:
Exibir trecho de código
Exemplo de uso:
fonte
Descobri uma maneira melhor de passar parâmetros para a janela pop-up e até mesmo recuperar parâmetros dela:
Na página principal:
Na janela pop-up:
É isso aí !
E isso é muito conveniente porque:
Diverta-se!
fonte
window.opener
não é compatível com todos os navegadores.Eu queria fazer isso no React usando Js simples e o fetch polyfill . OP não disse que queria especificamente criar um formulário e invocar o método submit nele, então fiz isso postando os valores do formulário como json:
fonte
A ação de envio padrão é Ext.form.action.Submit, que usa uma solicitação Ajax para enviar os valores do formulário para uma URL configurada. Para habilitar o envio normal do navegador de um formulário Ext, use a opção de configuração standardSubmit.
Link: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit
solução: coloque standardSubmit: true em sua configuração. Espero que isso ajude você :)
fonte
Eu usei isso no passado, uma vez que normalmente usamos a sintaxe de razor para codificação
{
// adicionar oculto e formulário arquivado aqui
}
fonte