Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brcontainer

Header Do Ajax não Funciona

Recommended Posts

encontrei umas funções em Ajax q servia pra corrigir a acentuação

E empedir de gravar no cache

Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");Ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");Ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");Ajax.setRequestHeader("Pragma", "no-cache");

Pórem elas naum funcionam, o sites q achei relacionado sobre o assunto diz q se deve usar

essas funções com metodo post

Assim:

Ajax.open(POST, url, true);
Pórem o metodo post naum prescisa disso ele ignora caches (ele naum grava no cache, só o GET grava no cache)

 

Essa funções nem corrigem os acentos e muito menos impedem de gravar no cache

 

Alguem sabe como usar essas funções corretamente? :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

lembre-se que Request Headers e Response Headers sao coisas bem diferentesquem controla o cache eh o Response Header, e nao o Request... ou seja, anular o cache fica a trabalho para a linguagem server-side (PHP ou outro)para corrigir os acentos:1 - na hora de ENVIAR dados: voce deve colocaras os valores encodados, use a funcao encodeURIComponent(string) do JavaScript, mas lembre-se, isso vai encodar em UTF-8, entao na linguagem server-side voce deve decodificar isso (no PHP voce pode usar utf8_decode())2 - na hroa de RECEBER dados: na linguagem server-side, coloquei o content-type, exemplo em PHP:header("Content-Type: text/html; charset=iso-8859-1");assim os dados chegarao corretamente ao JavaScriptespero ter esclarecido suas duvidas, qq coisa volte a postar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem quere te ofender cara tudo isso que você falow eu jah sei

porem a quesão é pra qual finalidade elas servem 'essas funções em ajax"

 

Valew mas o intuito do tópico naum é como corrigir acentos ou não gravar no cache e sim como usar essas "funções em ajax"

 

Se você ver o tópico que eu criei logo que me cadastrei você vai ver que eu manjo da parte dos "caches"

http://forum.imasters.com.br/index.php?sho...=196406&hl=

 

Mas valew a tentativa e continuo querendo respostas pras funções do Ajax e não como fazer em PHP ou Outro...

Porq isso eu jah sei

 

E outra eu to ligado disso de "response" e não request é que eu achei essas funções em

varios sites que afirmavam a utilidade para esses fins...Tendeu?

 

T+

 

Please ....Respostas

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce quer saber pra que utilidade pode servir esse comando do ajax?se esse for o caso, os usos vao do que voce imaginar, para hora de receber, voce pode usar isso para pegar informacoes passadas ao browser, e tb pode usar como um "paralelo" para informacoes diferenciadasum bom exemplo do uso de leitura de headers atravez do Ajax é usado pela biblioteca Prototype, nela existe um insentivo para que o codigo JSON (JavaScript Object Notation, muito usado para passar principalmente arrays entre a linguagem server-side e o client) seja passado num header que ele mesmo nomeou de X-JSON, assim a coisa fica mais clara, levando em consideracao que esse header sempre vai conter um codigo JSONe eu mesmo ja usei os headers de envio com a mesma finalidade, passando informacoes extras, mas que nao faziam parte do conteudo em si, como por exemplo, usar um header expecifico para dizer se uma session deve ser encerrada no servidor, assim eu sempre posso passar conteudos expecificos e conteudos extras via headers, sem um afetar ao outro e nem precisar criar uma separacao padrao para issoo uso dos headers em Ajax podem servir para muitas coisase qto a fazer coisas no server side, com ajax voce sempre vai fazer isso, pois a ideia principal é a ligacao entre cliente e servidor, nao tem muito sentido usar Ajax sem uma linguagem server-side, salvo pouquissimos casos...entao é isso kra, eu achei que voce nao estava conseguindo fazer a coisa, mas pelo jeito voce estava era procurando outra maneira de fazer isso, mas no modo client apenas (mexendo soh no javascript) voce nao encontrara maneiras eficientes para issoqualquer outra duvida volta a postar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você colocou varias ideias valew cara...tinha bastante coisa que eu num sabiaporem a finalidade naum é essa e sim por q alegam que essas funçõescorrigem acentos e impedem de gravar no cache se não fazem issoAe eu fico na neura pra que os outros usam essas porcarias q naum funcionamda maneira que queremos... e acusam que funciona...Será que esses sites que alegam isso só tem Noob que naumsabe testar as coisas direito...Ou será que essas funções funcionam e alguem escreveu algo erradoe por isso ela num tah funcionando???É isso que eu quero saber por q naum funcionam conforme deveriamValew cara por tewntar ajudar ^^Mas continuamos na espectativaRespostas...please

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom bom, vamo la, resposta rapida para suas perguntas:

 

P.é possivel corrigir a acentuacao na hora da RECEPCAO de dados com Ajax usando JavaScript??

R. não, isso não é possivel

 

por que nao? simples, qdo o browser joga o conteudo na tela, ele le os caracteres de acordo com o padrao informado pelo servidor na hora da resposta, no brasil usamos o ISO-8859-1, entao para os caracteres serem lidos corretamente, esse encode deve ser passado pelo servidor, avisando isso ao browser, como o Ajax nao controla a recepcao de dados, isso não é possivel de modificar atravez do JavaScript

 

talvez voce ja saiba disso que eu vou falar agora silverfox, mas se nao souber, deixa para os leitores que nao saibam ;)

 

no nosso querido protocolo HTTP, existem os headers, os headers sao informacoes passadas no contexto do protocolo HTTP, existem 2 tipos de Headers, os Request Headers (headers enviados para o servidor) e os Response Headers (headers enviados para o cliente), vamos falar sobre esses headers

 

Request Headers

Para que servem? Os request headers sao muito importantes, a principio eles informam ao servidor qual a pagina que esta sendo requisitada, tambem informam a versao do protocolo HTTP que deve ser interpretada, e alem disso, tambem servem para outras definicoes, por exemplo: antigamente as paginas HTTP apenas enviavam o conteudo de um html para o cliente, mas com o tempo viu-se a nescessidade de passar informacoes extras para o servidor, foi quando surgiram os metodos GET e POST, enquanto o GET é enviado direto no nome da pagina requisitada (logo apenas um caractere coringa, que nesse caso é a interrogacao (?)), já o método POST é passado de uma forma transparente, para maior seguranca, e também para suportar maiores valores de dados (pois os proprios browsers fazem uma limitacao ao tamanho da pagina requisitada). E como fazer isso? como criar esse POST? um metodo que passa informacoes sem serem vistas no link da pagina? entao decidiram que o conteudo do POST devia ser passado em forma de header, e é isso mesmo que acontece, primeiro informamos que o conteudo é um conteudo encodado, por isso usamos aquele header que voce mensionou ("Content-Type: application/x-www-form-urlencoded; charset=iso-8859-1"). Alem disso, coloram suporte a envio de arquivos, que nada mais é que o metodo POST, enviando o codigo do arquivo via header, mas para isso ja decidiram que para esse caso usaria-se outro tipo de conteudo, que é o "multipart/form-data". Os Request Headers também enviando outras informações para o servidor, como por exemplo o Browser que está fazendo a requisicao. Existe uma infinidade de Request Headers, é só consultar o RFC do HTTP para ver toda a lista, e eles sao os padroes do HTTP, alem deles pode-se usar headers personalidados para enviar outras informacoes.

 

Response Headers

Do outro lado, estão os response headers, que enviam informações para o cliente, como por exemplo em qual padrao o conteudo esta codificado, assim o browser pode exibir os caracteres corretamente na tela do usuario, eles também enviam um codigo de retorno, dizendo se a requisicao ocorreu corretamente (200), se o arquivo nao foi encontrado (404), entre muitos outros, assim o browser pode exibir corretamente a pagina para o cliente. Como dito anteriormente, eles tambem podem enviar informacoes personalizadas.

 

Entao como visto, os request headers e response headers tem papeis diferentes na requisicao, com o Ajax voce pode definir os request headers, mas nao pode controlar os response headers, pois isso é feito pelo servidor. Com linguagens server-side (PHP, ASP...) voce pode tanto ler os Request Headers (que foram enviados pelo Browser e por Ajax), como pode definir os Response Headers (modificando a forma de leitura dos mesmos pelo browser).

 

Por isso que eu disse, nao e possivel corrigir acentos pelo JavaScript, pois o Ajax nao tem controle sobre os Response Headers.

 

Espero que voce agora tenha entendido como é o esquema, e o porque de nao ser possivel corrigir a recepcao via JavaScript. O sistemas de headers funciona perfeitamente no Ajax, ele faz oque ele promete, enquanto as linguagens server-side conseguem ler os Request Headers, e modificar os Response Headers, o Ajax faz justamente o contrario, ele consegue ler os Response Headers, e modificar os Request Headers.

 

Se mesmo assim ainda tiver alguma duvida, pode postar, respondo com prazer ;)

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

É cara essas paradas são lokas vai ajudar quem tiver a curiosidade

de saber sobre Header Client etc...

 

você praticamente deu uma aula aqui ^^

isso foi loko

Da hora...

 

Agora minha missão será provar q essas funções não tem utilidade

como os outros pensavam e ensinar a maneira correta de se usar Headers

 

Mas se alguem souber por q as pessoas falam que essas funções

Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");Ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");Ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");Ajax.setRequestHeader("Pragma", "no-cache");
são usadas pra mudar a decodificação e impedir de gravar no cache

Posta ae please ^^

 

Valew pela aula Wilker

Compartilhar este post


Link para o post
Compartilhar em outros sites

silverfox só não adianta setar

 

charset=iso-8859-1"
Aqui

Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ...quiz dizer que não adianta por charset=iso-8859-1 pois o objeto xmlHttpRequest apenas trabalha com UTF-8claro não deixa de estar correto ... já que futuros browsers podem aceitar outros charSets nesse objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe maniacs, mas sua informacao esta incorreta, o xmlHttpRequest pode sim trabalhar com outros charsets fora o UTF-8 ;)isso eh provado na hora de recepcao de dados, onde você pode com uma linguagem server-side informar o charset de recepcao, e colocando iso-8859-1 voce consegue fazer os acentos chegarem direitinho para o JavaScript ;)agora, na hora de enviar dados, ai eu acho q ele embaralha tudo, porque qualquer caractere apos o 128 da erro, entao voce usa o encodeURIComponent() para gerar um hexadecimal em UTF-8 dos caracteres nao suportados, essa funcao transforma os caracteres nao suportados em uma representacao hexadecimal de 4 digitos do codigo UTF-8 do caractereflw ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim fui equivocado ao postar isso ... esta correto Wilker,mas cá entre nós ... eles bem que poderiam ter feito algo bem trabalhado no objeto ... porque diabos eles não fizerão para outros charsets para ENVIAR dados ....Até o proximo post !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");Ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");Ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");Ajax.setRequestHeader("Pragma", "no-cache");

É silver, realmente já testei estas funções de diversas formas e parece que os servidores (que deveriam tratar esta informação) simplesmente a ignoram.Exemplo: já tentei usar alguns accepts pra dizer ao servidor que eu aceito tal coisa (de acordo com as especificações http) e o servidor mandou o que ele tava afim, simplesmente ignorou.Eu não sei se fiz certo, mas achei estranho.

porque diabos eles não fizerão para outros charsets para ENVIAR dados ....

Coisa do protocolo HTTP.---------Não sei se pode ajudar, acho até que voces deve saber disso já, mas uma forma de forçar o não cache é através de gambiarras com a querystring (colocar um parametro aleatório na query string, daí o navegador irá requisitar uma nova página):
function antiCacheRand(aurl){		var dt = new Date();		if(aurl.indexOf("?")>=0){// já tem parametros			return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());		}else{ return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}	}//uso:novaurl = antiCacheRand(antigaurl);

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh isso ai micox, mas tipo, eu ainda prefiro ficar com a anulacao do cache via mudancas de header na linguagem server-side, alem de ser menos "gambiarristico", o controle pode ser feito de uma melhor formae se for para acessar uma pagina nao dinamica, ai eu n vejo porque nao usar o cachemas ai fica a criterio de cada um ;)um abraco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew micox eu jah sabia dessas "gambiarras", mas a questão naum é como corrigir e sim como fazer funcionar essas tags...Eu sei fazer isso tudo em PHP asp cgi cold...etc...A questão aqui é as tags em javascriptmas valew o esforço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri pra que "serve" essas quase inutilidades...

servem apenas para formularios...

 

o q quero dizer é que naum servem para retorno de informações apenas para envio

ae vem tipo só o servidor "verá" o codigo com a codificação do charset modificada...

só q ae vem o problema METHOD post num grava em cache entaum naum a necessidade de se utilizar

as tags de cache

 

Ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");Ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");Ajax.setRequestHeader("Pragma", "no-cache");
e a de coidificação do charset pode ser modifica por PHP, ASP, CGI, JAVA, COLD-FUSION, etc

 

Achu q como Ajax é mais antigo do que pensamos essas TAGS de setRequestHeaders foram

feitas na epoca em que linguagem poderosas como essas ainda naum eram muito conhecidas a fundo

 

entaum não há necessidade de se utilizar essas TAGs

 

Obrigado pela paciencia...e espero ter ajudado

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.