Estive desenvolvendo uma aplicação web e me deparei com a seguinte situação:
Atualizar um campo ajax que existe no arquivo principal (pai), através de um pop-up (filho).
Se esta é sua dúvida, continue lendo … tenho a solução!
Obs: Não foco como implementar o ajax, parto do princípio que você já tenha moldado o ajax aos arquivos.
Exemplo:
Em um formulário de produtos, tenho um combo gêneros, carregado utilizando ajax. Neste campo facilitaria bastante se existisse uma maneira de cadastrar estas informações apartir da tela de produtos, portanto, cria-se um pop-up, desenvolve o formulário de gêneros e salva as informações.
Mas como ao salvar, retornar para a tela principal com esta nova informação atualizada no combo ajax?
Bom, … a solução:
No action do formulário, chame o próprio pop-up, salve as informações, em seguida identifique o browser, pois a função utilizada difere, feche a janela pop-up e então no body chame a função onunload (execução ao fechar a janela), e use a função window.opener.execScript ou window.opener.eval. O truque esta em que ambas as funções possibilitam a chamada de uma função javascript existente no arquivo principal, esta função que será chamada deve ser a que carrega seu combo ajax.
Visualize as descrições no código abaixo [Resumidamente]:
Arquivo Principal (Pai):
<!– Função javascript que carrega informações combo ajax –>
function carregar_generos(){
ajax(‘id_genero’, ‘caminho_arq_ajax’, ‘method’);
}
<!– Identificação do combo ajax –>
<span id=”id_genero”>
<select name=”CODIGOGENERO” id=”CODIGOGENERO” class=”TextFieldMntObrig”>
<option value=”0″>Selecione o Gênero</option>
</select>
</span>
<!– Chamada do pop-up –>
<a onClick=”window.open(‘caminho_arq_popup’,'genero’,'top=400, left=400, width=800, height=150′);”>
Adicionar Gênero
</a>
Arquivo Pop-Up (Filho):
// Salva as informações e fecha a janela pop-up
if(acao for gravar)){
// Faz os procedimentos para gravar as informações no bd de gêneros
// Obriga a fechar a janela de pop-up (Aqui dispara o onunload)
<script language=”javascript”>window.close();</script>
}
/* Método que identica o browser – IE e FireFox */
<script language=”JavaScript”>
var nom = navigator.appName;
var browser = 2;
if (nom == “Microsoft Internet Explorer”){
alert(“Microsoft Internet Explorer”);
browser = 1;
}else if (nom == “Netscape”){
alert(“Netscape”);
browser = 2;
}
</script>
<!– Formulário e o truque, chamada da função javascript no arquivo principal –>
<html>
<body onunload=”javascript:if(browser == 1) window.opener.execScript(‘carregar_generos()’); else window.opener.eval(‘carregar_generos()’);”>
<form name=”frmGenero” method=”post” action=”nome_arquivo_popup.extensao?acao=gravar” id=”frmGenero”>
<!– Conteúdo do formulário –>
</form>
</body>
</html>
Pronto, … bronca resolvida!