Logo Hardware.com.br
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas

Ajax e C/C++ e Cgi. Alguém aqui manja de Ajax?

#1 Por The Doug 07/10/2008 - 12:37
E aí pessoal, não manjo muito de programaćão Web, então to pedindo ajuda.

Quero fazer o seguinte. Eu tenho uma página com vários textbox e combobox, e vários botões, cada um relacionado a um desses elementos. Então eu quero clicar em um botão, e mandar a informaćão q está no textbox/combobox pro servidor, usando ajax.

O problema é q o programa no servidor precisa ser escrito em C/C++ (de preferencia C). A solućão é usar cgi, o q é tranquilo. A grande dúvida é q preciso mandar por ajax só a informaćão relativa ao textbox/combobox considerado, e o cgi precisa identificar o q está sendo enviado pra processar cada informaćão de uma forma.

Eu to usando o pacote cgic, e parece q vai dar pra fazer.

Alguém pode me ajudar com informaćões?
..........
Valeu
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#3 Por peczenyj
07/10/2008 - 17:29
Ajax é completamente neutro em relação ao que esta executando no servidor: se C++, PHP ou BashScript. Via Ajax vc vai fazer um request a um determinado serviço. O servidor vai tratar esse request em especial e tudo isso é assincrono à pagina. Eles se comunicam via HTTP, este é o protocolo que tens que ter em mente.

Procure aqueles exemplos de popular uma combobox com os dados de cidade quando a combobox de estado foi escolhida. Geralmente quando vc altera o nome do estado vc dispara uma consulta no banco de dados por aquelas cidades. O servidor pode responder em XML ou JSON para o javascript, que vai popular a combo de cidades.

Caso a sua duvida seja mais especifica, dê um exemplo!
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#4 Por The Doug
07/10/2008 - 17:36
mcv disse:
Nunca usei a cgci mas a parte cliente (Ajax) nada mais faz que enviar informação através de POST e GET e depois receber a resposta como se fosse qualquer outra requisição.

Você teria alguma dúvida mais específica?


E aí mcv. Na verdade a minha duvida maior é na parte do servidor. Pois como tenho q ter um programa em C/C++, não vou poder fugir do cgi. Quando eu clico num botão, o cliente tem q enviar a informaćão contida em um textbox específico, e o servidor (o cgi no caso) tem q saber o q está sendo enviado pra q ele tome a aćão correta.
A dúvida é como tratar a informaćão vinda. Pra isso eu tenho saber o q está sendo enviado e como o servidor pode diferenćar os vários comandos q posso realizar na página.


O Ajax pelo q estudei até o momento tem 3 partes: Primeiro é dar um Open no objeto xmlhttprequest q foi instanciado. Segundo é cadastrar uma funćão de callback. Terceiro é dar um send. Nos exemplos q vi esse send geralmente é passando com null como parâmetro. Estou vendo no momento se posso mandar informaćões junto com esse send, mas a dúvida maior ainda continua sendo como o cgi trataria essa informaćão.

Valeu

Ajax é completamente neutro em relação ao que esta executando no servidor: se C++, PHP ou BashScript. Via Ajax vc vai fazer um request a um determinado serviço. O servidor vai tratar esse request em especial e tudo isso é assincrono à pagina. Eles se comunicam via HTTP, este é o protocolo que tens que ter em mente.

Procure aqueles exemplos de popular uma combobox com os dados de cidade quando a combobox de estado foi escolhida. Geralmente quando vc altera o nome do estado vc dispara uma consulta no banco de dados por aquelas cidades. O servidor pode responder em XML ou JSON para o javascript, que vai popular a combo de cidades.

Caso a sua duvida seja mais especifica, dê um exemplo!
Ok, deixa eu explicar com um exemplo. Eu tenho 2 textbox e 2 botões, cada um dos botões relacionados a um dos textbox. Essa página vai setar uma plaquinha wifi q está lá no servidor. O primeiro textbox está relacionado ao canal do wifi, e o segundo relacionado à taxa.
Então eu colocaria um valor em qq um dos textbox, digamos o canal, e clicaria no botão, q mandaria essa informaćão por ajax pro servidor. O servidor tem q pegar essa informaćão, saber q foi clicado no botão de canal e saber q o valor q está vindo é referente ao canal. Então o servidor faria algo pra setar o canal e enviaria uma resposta dizendo se a operaćão foi ok ou não. Essa resposta apareceria num label qq.

A duvida é qual é a melhor maneira de mandar essa informaćão, e como o servidor trataria isso. Como ele saberia q o q veio é relativo ao canal ou a taxa?

Esse é um exemplo simples. Na verdade a minha página tem uma porrada de botões, e uma porrada de textbox/combobox. Pra complicar, tem botões q ao serem apertados devem mandar informaćões contidas em vários textbox. E o servidor tem q tratar isso.

Sugestões são bem vindas
Visitem meu site:

www.infotalkers.com
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#5 Por peczenyj
07/10/2008 - 17:40
Doug.

http://www.w3schools.com/Ajax/Default.Asp

Vc sabe como fazer um servidor C++ c/ CGI para receber um GET ou POST?
Vc sabe como fazer um exemplo simples que escreva num arquivo de log "oi, estou recebendo a seguinte requisição HTTP, veja abaixo" ?

Cara, vai por tentativa e erro!

Vc disse que tem que tratar a informação vinda, mas HTTP é um protocolo stateless, logo vc pode ter que tratar sessões e cookies.

Imagine que vc quer um tradutor: eu escrevo no textbox 'blue' e o c++ deve dizer 'azul'.

Eu posso fazer o seguinte request

GET /traduzir?texto=blue

E o servidor pode responder

azul

Nesse caso não preciso de sessão pois estou só consultando, mas se tenho que ter autenticação, etc... ;-_
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#6 Por mcv
07/10/2008 - 17:47
É muito mais simples do que você imagina.
Vc sabe como fazer um servidor C++ c/ CGI para receber um GET ou POST?
Vc sabe como fazer um exemplo simples que escreva num arquivo de log "oi, estou recebendo a seguinte requisição HTTP, veja abaixo" ?
É isso aí. Ajax é um conceito que só existe mesmo no cliente. Para o servidor é uma requisição qualquer.

Não sei da cgci, mas se estiver usando apache é só usar
query = getenv( "QUERY_STRING" )
se estiver usando GET e pegar a string que será algo do tipo: "name=Doug&age=29".
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#7 Por The Doug
07/10/2008 - 17:56
mcv disse:
É muito mais simples do que você imagina. É isso aí. Ajax é um conceito que só existe mesmo no cliente. Para o servidor é uma requisição qualquer.

Não sei da cgci, mas se estiver usando apache é só usar se estiver usando GET e pegar a string que será algo do tipo: "name=Doug&age=29".


Eu to aprendendo cgi. Já fiz muita coisa. Eu até tenho uma solućão, q é varrer todos os botões e ver qual foi apertado, aí eu sei tratar a informaćão q está vindo. mas é extremamente desotimizado. Eu queria uma forma de captar eventos da página entende?

Meu próximo passo seria mesmo analizar o QUERY_STRING.

Na verdade o ideal pra mim seria criar uma estrutura em javascript (da mesma forma q o struct em c), transformar essa estrutura em um vetor de bytes, enviar isso por ajax, e lá no cgi dar um cast pra uma estrutura prédefinida. Aí nas variáveis da estrutura eu saberia quem enviou e teria acesso aos valores facilmente. Logicamente essa estrutura teria um cabećalho comum q teria um id onde eu pudesse saber a estrutura certa pra dar o cast. Nesse caso teria q usar algo diferente de QUERY_STRING, pois um vetor de bytes com certeza enviaria caracteres não printáveis.
Será q é viável?
Visitem meu site:

www.infotalkers.com
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#8 Por peczenyj
07/10/2008 - 18:05
Vc vai ter mais performance se estudar um framework Ajax como o Prototype ou JQuery.

Não trate javascript como vetores de bytes ou algo próximo de baixo nivel: existem parsers xml, json e mesmo frameworks CGI para C++ para garantir a interoperabilidade entre essas 2 tecnologias. Até pq vc não sabe a arquitetura da maquina cliente ;-)
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#9 Por mcv
07/10/2008 - 18:05
Na verdade o ideal pra mim seria criar uma estrutura em javascript (da mesma forma q o struct em c), transformar essa estrutura em um vetor de bytes, enviar isso por ajax, e lá no cgi dar um cast pra uma estrutura prédefinida. Aí nas variáveis da estrutura eu saberia quem enviou e teria acesso aos valores facilmente. Logicamente essa estrutura teria um cabećalho comum q teria um id onde eu pudesse saber a estrutura certa pra dar o cast. Nesse caso teria q usar algo diferente de QUERY_STRING, pois um vetor de bytes com certeza enviaria caracteres não printáveis.
Será q é viável?
Acho que no mínimo não seria portável. Será que um int teria o mesmo tamanho no javascript e no servidor? O charset no cliente seria o mesmo no servidor? Voce precisaria de muitas linhas de código para solucionar esses problemas.

O ideal seria analisar a QUERY_STRING ou, melhor ainda, usar a cgci que tornaria as coisas mais transparentes.



EDITADO: XML também tá aí pra isso.


_
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#10 Por The Doug
07/10/2008 - 18:17
peczenyj disse:
Vc vai ter mais performance se estudar um framework Ajax como o Prototype ou JQuery.

Não trate javascript como vetores de bytes ou algo próximo de baixo nivel: existem parsers xml, json e mesmo frameworks CGI para C++ para garantir a interoperabilidade entre essas 2 tecnologias. Até pq vc não sabe a arquitetura da maquina cliente ;-)


Ok, mas eu necessariamente tenho q usar cgi no servidor. Tem q ser código C/C++. Vc sabe o nome de frameworks em C/C++ onde eu possa ter esta interoperabilidade?


Acho que no mínimo não seria portável. Será que um int teria o mesmo tamanho no javascript e no servidor? O charset no cliente seria o mesmo no servidor? Voce precisaria de muitas linhas de código para solucionar esses problemas.

O ideal seria analisar a QUERY_STRING ou, melhor ainda, usar a cgci que tornaria as coisas mais transparentes.



EDITADO: XML também tá aí pra isso.
Eu to usando cgic. A duvida é realmente como parsear a informaćão vinda pra saber o q o usuario fez. Tudo bem, eu posso parsear o QUERY_STRING na mão, mas queria saber se existem bibliotecas prontas onde eu consiga ter acesso a isso de forma mais fácil.
Uma outra solućão seria ter um executável relacionado a cada botão dá página, o cliente chamaria o cgi certo q já saberia o q fazer com os dados. Mas eu quero ter só um cgi q cuida de tudo.


Vcs conhecem bibliotecas pra C q lidam com XML? Se eu conseguir mandar XML por ajax e tratar isso no servidor, em C, aí acho q resolve.

Valeu...........
Visitem meu site:

www.infotalkers.com
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#12 Por mcv
07/10/2008 - 18:23
Para o C tem a libxml2.

Eu to usando cgic. A duvida é realmente como parsear a informaćão vinda pra saber o q o usuario fez. Tudo bem, eu posso parsear o QUERY_STRING na mão, mas queria saber se existem bibliotecas prontas onde eu consiga ter acesso a isso de forma mais fácil.
Uma outra solućão seria ter um executável relacionado a cada botão dá página, o cliente chamaria o cgi certo q já saberia o q fazer com os dados. Mas eu quero ter só um cgi q cuida de tudo.
Parece que a sua dúvida é com a lógica e a estrutura do programa. Por que não coloca seu código? Ficaria mais fácil a gente te ajudar.
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#13 Por The Doug
07/10/2008 - 18:31
mcv disse:
Para o C tem a libxml2.

Parece que a sua dúvida é com a lógica e a estrutura do programa. Por que não coloca seu código? Ficaria mais fácil a gente te ajudar.



Não é a lógica. Eu quero saber se existe um mecanismo mais avanćado q este. A solućão provavelmente vai ser Xml.
Senão vou ter q realmente ficar parseando string.

Eu não mexo muito com programaćão web. Trabalho mais com baixo nível. Infelizmente a programaćão web não avanća tanto quanto outras areas. Se os browsers suportassem conexões tipo Named Pipe do linux, aí daria pra fazer muito mais coisas.
Visitem meu site:

www.infotalkers.com
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#15 Por The Doug
07/10/2008 - 20:09
mcv disse:
Qual o problema com a cgic? Não a conheço muito bem, mas ela deve ter funções para pegar um valor enviado simplesmente dando uma string. Por exemplo, para pegar o nome enviado:


Sim, vc dá um cgiVal("nome") e ele pega o valor associado ao "nome" q veio na string enviada pelo ajax. Mas o problema é justamente esse. Eu tenho dezenas de botões e textbox/combobox, então como sei qual é o q tá vindo no momento, pra poder dar o cgiVal no objeto certo?

Vamos supor q o ajax mande a string "canal=6". Beleza, mas na página existem muitos extbox/combobox e botões, portanto como sei q devo dar um cgiVal("canal")?
Se eu tivesse informação sobre o q está vindo, sem ter q parsear o QUERY_STRING, aí ficaria fácil. Mas pelo visto não tem como, pois não dá pra ter acesso aos eventos ocorridos ná página, só à string enviada.

A solução mais elegante pelo visto é usar Xml. Aí eu crio uma strutura em Xml, onde especifico o q eu estou fazendo, passo os valores e resgato isso no servidor, usando as bibliotecas de Xml pra C.
Visitem meu site:

www.infotalkers.com
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal