Sei que aqui não é o lugar correto para esta pergunta, mas estou no desespero! hehehehehe…
Tenho uma aplicação web em um servidor que abre um formulário para preenchimento de alguns dados. Dentre os quais, latitude e longitude
Tenho outra aplicação web em outro servidor que abre um mapa para que o usuário clique e encontre as correspondentes coordenadas.
Eu preciso fazer uma aplicação preencher campos da outra. Ou seja, utilizando javascript, preciso que a aplicação com o mapa preencha as coordenadas do formulário.
Num mesmo servidor consigo fazer isto sem problemas: abro a aplicação com o mapa utilizando window.open() e preencho os dados utilizando javascript.
O problema é que isto não funciona quando as aplicações estão em servidores diferentes e, obrigatoriamente, tenho que manter cada uma delas em seu devido servidor.
Alguém sabe como quebrar esta barreira do javascript?
XML? WebService? Arquivo TXT? Banco de dados? Ajax?
Tem tanta opção que eu até ia sugerir que você fizesse a consulta no fórum de javascript e não no de java básico.
Agora, aguarde um moderador (ou notifique algum) para mover teu tópico.
apferreira
Obrigado por responder, drsmachado!
O problema é que todas estas opções são texto. Preciso que o usuário clique em um mapa que abro em uma das aplicações para que eu possa capturar a coordenada geográfica do clique e devolvê-la na aplicação do formulário.
nel
Cara, estamos falando em cross-domain e isso é uma $&@&@ em Javascript. Quando se está no mesmo IP ou mesma rede, mas em instâncias de servidores distintos, não é um bixo de sete cabeças, mas em redes diferentes e/ou IP´s, cara, isso é uma baita dor de cabeça. Há segurança envolvida que não permite executar o JS e etc. Inclusive, foi algo que estamos nos incomodando em nosso sistema, mas por motivos particulares do mesmo.
O seu problema, não se resolve se tu fizer comunicação HTTP entre os servidores ? Tu precisa usar exclusivamente comunicação entre JS ?
apferreira
Olá, Nel! Obrigado por ter respondido!
Então, possivelmente eu conseguiria resolver o problema de outras formas mas nenhuma tão dinâmica quanto usando JS.
Eu não sabia que o nome disto é cross-domain. Vou pesquisar sobre o assunto.
vlw
nel
apferreira:
Olá, Nel! Obrigado por ter respondido!
Então, possivelmente eu conseguiria resolver o problema de outras formas mas nenhuma tão dinâmica quanto usando JS.
Eu não sabia que o nome disto é cross-domain. Vou pesquisar sobre o assunto.
vlw
É um assunto bem discutido, não vai ser difícil encontrar material. Mas cara, como assim tão dinâmica quanto JS?
Não me agradou essa sua ideia de um JS se comunicando com outro para essa tua necessidade. Porque não usar Web Service nessa comunicação? Porque não usar o padrão XML como citado para isso ?
Não sei não, acho que precisas pensar melhor na sua proposta e possíveis soluções.
apferreira
Olá, Nel!
Então, o problema é que não estou simplemente mandando texto para um lado e imediatamente recuperando a informação, dependo da intereção com o usuário.
Funciona assim, o usuário dá um clique em um botão na aplicação que tem o formulário e abre um mapa. Para que as informações sejam enviadas do mapa para o formulário ele precisa dar um clique no mapa. É neste momento que o problema surge.
Uma solução seria, no momento do clique no mapa, setar um cookie com as coordenadas. Daí o usuário teria que dar um novo clique na aplicação com o formulário para recuperar os dados deste cookie e alimentar as coordenadas. Nesta solução, o usuário teria que dar um clique à mais para tudo funcionar. Eu passaria a ter três eventos ao invés de apenas dois: clique no formulário - clique no mapa - clique no formulário ao invés de clique no formulário - clique no mapa.
drsmachado
Camarada, quanta bobagem.
Já ouviu falar da função timeout do javascript?
E sobre ajax? Já?
Sinceramente, com XML, Ajax e um pouco de força de vontade, você resolve isso tranquilamente.
apferreira
Obrigado, drsmachado!
Você é muito gentil!
drsmachado
Por um momento pensei que você quisesse opiniões sobre opções para resolver a situação. Se soubesse que o que, na verdade, quer é gentileza, teria sido mais polido e comedido em meus comentários.
apferreira
Olá, drsmachado!
Fico muito grato por sua contribuição. Apenas acho que há maneiras realmente mais polidas e comedidas de se fazer comentários.
De qualquer forma, já havia considerado o timeout e ajax com xml e nenhuma destas soluções se aplicou à realidade da minha aplicação.
Vou continuar pesquisando.
Muito obrigado por sua ajuda!
nel
Não entendi porque a ideia do machado não se aplica a sua necessidade. Vamos lá, explique sua necessidade pois não a compreendi como um todo.
Esqueça a parte técnica, esqueça usar javascript, PHP, ajax ou bla bla bla. Fala como um usuário, por favor.
Luizao
Pra fazer requisições cross-domain vc precisa usar jsonp
Olá, Nel!
Bom, pode ser que, por falta de competência técnica, eu não tenha conseguido fazer o cross-domain utilizando ajax e xml como sugerido pelo drsmachado. Tudo é possível! hehehehehehe…
Deixe-me tentar explicar como tudo funciona:
Tenho uma aplicação web em um servidor que abre um formulário para que o usuário preencha com vários dados.
Tenho outra aplicação em outro servidor que abre um mapa que captura as coordeadas geográficas ao ser clicado.
Quando coloco as duas aplicações em um mesmo servidor, o usuário clica em um botão que abre o mapa em outra janela. Ao clicar no mapa, a aplicação do mapa preenche, imediata e automaticamente, os campos altitude e longitude daquele primeiro formulário aberto.
Quando coloco as aplicações em servidores diferentes (e, obrigatoriamente têm que ficar em servidores diferentes), tudo funciona bem, exceto o preenchimento dos campos do primeiro formulário.
Acho que aí é que entra o problema do cross-domain.
apferreira
Olá, Luizão!
Não sei nada de Jsonp. Vou pesquisar e ver o que consigo.
Obrigado
Bruno_Ferreira1
JSON é uma forma de representar dados, assim como o xml, utilizado no javascript ou em qualquer outra linguagem.
Olhando o seu problema, eu penso que o correto é:
1° no primeiro formulário, ao clicar para abrir a aplicação com o mapa, guarde as informações preenchidas na sessão e feche o 1° formulário (se o mapa abre como popup, você pode usar ajax pra mandar as informações pro JSP, PHP, ASP, ou seja la o que for)
2° ao clicar no mapa, mande um post para o arquivo do primeiro formulário com os dados de longitude e latitude
3° reabra o 1° formulário e carregue os dados que estavam na sessão e os dados que vieram via post da aplicação do mapa
nel
Bruno Ferreira:
JSON é uma forma de representar dados, assim como o xml, utilizado no javascript ou em qualquer outra linguagem.
Olhando o seu problema, eu penso que o correto é:
1° no primeiro formulário, ao clicar para abrir a aplicação com o mapa, guarde as informações preenchidas na sessão e feche o 1° formulário (se o mapa abre como popup, você pode usar ajax pra mandar as informações pro JSP, PHP, ASP, ou seja la o que for)
2° ao clicar no mapa, mande um post para o arquivo do primeiro formulário com os dados de longitude e latitude
3° reabra o 1° formulário e carregue os dados que estavam na sessão e os dados que vieram via post da aplicação do mapa
Concordo com o ponto dois, mas não vejo necessidade de recarregar o formulário. As informações já estão em tela, portanto, basta preencher os dois campos faltantes com as informações oriundas da outra aplicação. O bom de se usar JSON é a compatibilidade com N servidores de aplicação e padrões.
Motivo pelo qual também sugeri a possibilidade de usar XML, ou, Web Service. Uma possibilidade, é JSON, Ajax e REST para a comunicação POST.
Abraços.
Bruno_Ferreira1
nel:
Bruno Ferreira:
JSON é uma forma de representar dados, assim como o xml, utilizado no javascript ou em qualquer outra linguagem.
Olhando o seu problema, eu penso que o correto é:
1° no primeiro formulário, ao clicar para abrir a aplicação com o mapa, guarde as informações preenchidas na sessão e feche o 1° formulário (se o mapa abre como popup, você pode usar ajax pra mandar as informações pro JSP, PHP, ASP, ou seja la o que for)
2° ao clicar no mapa, mande um post para o arquivo do primeiro formulário com os dados de longitude e latitude
3° reabra o 1° formulário e carregue os dados que estavam na sessão e os dados que vieram via post da aplicação do mapa
Concordo com o ponto dois, mas não vejo necessidade de recarregar o formulário. As informações já estão em tela, portanto, basta preencher os dois campos faltantes com as informações oriundas da outra aplicação. O bom de se usar JSON é a compatibilidade com N servidores de aplicação e padrões.
Motivo pelo qual também sugeri a possibilidade de usar XML, ou, Web Service. Uma possibilidade, é JSON, Ajax e REST para a comunicação POST.
Abraços.
Como ele faria pra ficar “escutando” um post no 1º formulário, aguardando os dados do mapa?
Nunca utilizei esse REST, ele serviria pra isso?
nel
Bruno Ferreira:
nel:
Bruno Ferreira:
JSON é uma forma de representar dados, assim como o xml, utilizado no javascript ou em qualquer outra linguagem.
Olhando o seu problema, eu penso que o correto é:
1° no primeiro formulário, ao clicar para abrir a aplicação com o mapa, guarde as informações preenchidas na sessão e feche o 1° formulário (se o mapa abre como popup, você pode usar ajax pra mandar as informações pro JSP, PHP, ASP, ou seja la o que for)
2° ao clicar no mapa, mande um post para o arquivo do primeiro formulário com os dados de longitude e latitude
3° reabra o 1° formulário e carregue os dados que estavam na sessão e os dados que vieram via post da aplicação do mapa
Concordo com o ponto dois, mas não vejo necessidade de recarregar o formulário. As informações já estão em tela, portanto, basta preencher os dois campos faltantes com as informações oriundas da outra aplicação. O bom de se usar JSON é a compatibilidade com N servidores de aplicação e padrões.
Motivo pelo qual também sugeri a possibilidade de usar XML, ou, Web Service. Uma possibilidade, é JSON, Ajax e REST para a comunicação POST.
Abraços.
Como ele faria pra ficar “escutando” um post no 1º formulário, aguardando os dados do mapa?
Nunca utilizei esse REST, ele serviria pra isso?
Não, o REST é um padrão de serviço web acessado via requisições HTTP.
Ele precisa de um listener que fique aguardando uma resposta. Assim como o machado citou, uma função timeout do javascript. Eu faço algo parecido aqui. É aberto um popup para o usuário efetuar o login em outro sistema. Somente após feito esse login uma determinada ação é executada. Enquanto isso, ele fica aguardando.
apferreira
Olá, pessoal!
Me desculpem pela demora em responder. Tive uma reunião agora à tarde que tomou o meu tempo todo.
Vou tentar aprender um pouco de JSON para ver se consigo resolver o problema.
Muito obrigado pelas dicas de vocês.
Assim que tiver uma solução, postarei aqui o que fiz.
Obrigado