mcv
Veterano
Registrado
1.2K Mensagens
40 Curtidas
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?
The Doug
Super Participante
Registrado
890 Mensagens
10 Curtidas
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
mcv
Veterano
Registrado
1.2K Mensagens
40 Curtidas
É 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
Super Participante
Registrado
890 Mensagens
10 Curtidas
É 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?
mcv
Veterano
Registrado
1.2K Mensagens
40 Curtidas
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
Super Participante
Registrado
890 Mensagens
10 Curtidas
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...........
mcv
Veterano
Registrado
1.2K Mensagens
40 Curtidas
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
Super Participante
Registrado
890 Mensagens
10 Curtidas
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.
mcv
Veterano
Registrado
1.2K Mensagens
40 Curtidas
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:
char *nome = cgi_get_value("nome"); //função hipotética
The Doug
Super Participante
Registrado
890 Mensagens
10 Curtidas
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.