Viablog | TI e desenvolvimento de Software

TAG | JavaScript

J谩 viram o post anterior sobre Ajax e JQuery? N茫o deixem de ler, nele apresentamos um problema causado pelo assincronismo do Ajax e uma forma simples, por茅m n茫o ideal, de resolv锚-lo.

Para o problema proposto no outro post existe uma forma de realizar a execu莽茫o ass铆ncrona, sem utilizar .defered e mesmo assim estabelecer que uma execu莽茫o s贸 ir谩 ocorrer ap贸s a outra, isso se deve a um recurso antigo da programa莽茫o e que nem todo programador domina: a recursividade.

Veja o exemplo anterior, s贸 que modificado:

function execExclu(executou){
 
 jQuery.each(mapArray, function(i){
 
  if(executou == i){
   executou ++;
   jQuery.ajax(/meuScript.php)
    .done(function() { alert(鈥淓xecutou com sucesso!); execExclu(executou); })
    .fail(function() { alert("Erro no processo!"); });
 
   return false;
  }
 });
}

O exemplo e autoexplicativo, foi criada uma fun莽茫o recursiva que ao ser chamada faz o primeiro step no la莽o de repeti莽茫o, aciona o execu莽茫o Ajax do JQuery e imediatamente retorna falso finalizando a execu莽茫o do la莽o, o pulo do gato est谩 no detalhe que por se ass铆ncrono a execu莽茫o Ajax continua o seu processo e ao finalizar com sucesso ele chama novamente a pr贸pria fun莽茫o (recursividade).

Nesta fun莽茫o existe uma vari谩vel que 茅 o indexador anterior que comparado com o indexar da atual repeti莽茫o ir谩 indicar em qual step do la莽o de repeti莽茫o a chamada Ajax deve ser acionada.

Nesta t茅cnica aproveitamos o recurso chamado callback que o JQuery implementa de forma maravilhosa, nos callbacks conseguimos executar a莽玫es espec铆ficas no final da execu莽茫o, assim podemos ter diversos tipos de processo para cada tipo de callback retornado (sucesso, erro, etc).

Para refinar ainda mais, podemos aproveitar o .ajaxStart() e .ajaxStop() para implementar overlay para indicar de forma visual e bem elegante ao usu谩rio que existe uma execu莽茫o em andamento e que ele dever谩 ter paci锚ncia at茅 o final da execu莽茫o.

Leia mais:

· ·

JQuery adicionou uma nova vis茫o sobre o desenvolvimento de interfaces ricas para sites e sistemas Web, afinal, n茫o era mais preciso programar dezenas de linhas em Ajax, poder铆amos consumir Ajax de forma simples utilizando as fun莽玫es da JQuery.

Como todos sabem, por excel锚ncia as chamadas de Ajax no JQuery s茫o ass铆ncronas, e quando voc锚 est谩 dentro de um la莽o de repeti莽茫o e aciona uma URL que ir谩 processar algo para o seu sistema em backend, por茅m esta execu莽茫o 茅 lenta e ir chamando via Ajax tem a particularidade de ir executando o la莽o de repeti莽茫o at茅 a sua finaliza莽茫o e mesmo que a execu莽茫o do Ajax n茫o tiver sido finalizada uma nova requisi莽茫o 茅 feita.

A principio isto n茫o 茅 ruim, por茅m, em determinados casos 茅 poss铆vel que uma execu莽茫o interfera sobre a outra devido ao fato de que podem manipular a mesma rotina interna, como acertar isto ent茫o?

Embora desde a vers茫o 1.5 o JQuery implemente .deferred nas chamadas Ajax 茅 poss铆vel que a altera莽茫o da sua rotina para um controle de .deferred se torne muito 谩rduo, por isso existem solu莽玫es mais simples e que podem servir a um grande leque de situa莽玫es, a solu莽茫o mais simples para o processo acima 茅 deixar a execu莽茫o do Ajax via JQuery de forma s铆ncrona, assim, uma repeti莽茫o do la莽o s贸 ocorre quando a requisi莽茫o Ajax terminar, criando assim um fila 煤nica do processo.

Veja um exemplo:

jQuery.ajax({
 url:/meuScript.php, //Aqui vai a URL ou script a ser acionado
 async: false, //Aqui voc锚 define a execu莽茫o como s铆ncrona
 jsonp: false, //Controle do fluxo de retorno
 complete: function( /*coloque aqui sua instru莽茫o ao finalizar com sucesso a sua requisi莽茫o*/){ }
});

Viu, muito simples, como tudo em JQuery, embora extremamente simples de se implementada a t茅cnica acima tem um grave problema, por ser uma execu莽茫o s铆ncrona, o browser ficar谩 congelado, o que n茫o 茅 nada elegante, aguardando o retorno da execu莽茫o e caso outros scripts precisem se acionados eles ter茫o que esperar a execu莽茫o da chamada s铆ncrona, n茫o haver谩 modo de executa-los paralelamente.

Como resolver ent茫o?

脡 simples tamb茅m, n茫o deixem de acompanhar a solu莽茫o ass铆ncrona para o problema proposto.

Leia mais:

· ·

Ultimamente tenho me divertido um bocado programando interfaces Web e para isso o conjunto HTML + CSS + JQuery (JavaScript) tem demonstrado o n铆vel de refinamento que as interfaces Web possuem hoje, seja na caga ass铆ncrona de dados ou puramente adicionando artefatos e efeitos visuais em tela, arrisco dizer que hoje uma interface Web pode ser mais rica que uma interface desktop e olhe que n茫o estou me referindo ao Adobe Flash ou Microsoft Silverlight.

Uma duvida que 茅 recorrente dos novatos e que 茅 muito simples de resolver via JQuery 茅 a captura da altura da tela e da altura do HTML, note que a altura do HTML pode ser maior que a altura da tela pelo simples fato que os navegadores geram barras de rolagem.

Via JQuery temos com capturar os dois casos:

$(window).height();聽聽 // Retorna a altura do view do navegador
 
$(document).height(); // Retorna a altura do HTML

Viram? Bem simples aplicando o JQuery, de posse dos valores o tratamento vai de como voc锚 quiser e precisar.

Leia mais:

·

Muitos desenvolvedores Web se veem obrigados a espalhar c贸digos CSS em meio ao HTML, JavaScript ou PHP por um simples motivo: o seu c贸digo CSS precisa receber valores dinamicamente, um caso dif铆cil de ser resolvido, bem, dif铆cil at茅 agora.

Na verdade existem duas formas de conseguir enviar valores para um arquivo CSS, a primeira 茅 editando o arquivo .htaccess e por consequ锚ncia s贸 ir谩 funcionar em servidores Apache, mas 茅 bem prov谩vel que voc锚 encontre formas alternativas em outros servidores web, esta t茅cnica n茫o envolve nenhuma altera莽茫o mais profunda no c贸digo-fonte da sua aplica莽茫o web e toda a altera莽茫o consiste apenas no lado do servidor.

Consiste em incluir uma linha como esta no seu arquivo .htaccess:

AddType application/x-httpd-php .css

Est谩 linha ir谩 indicar para o servidor Apache que arquivos com a extens茫o CSS dever谩 ser interpretados como um arquivo PHP, logicamente captura de dados via GET e POST ser谩 poss铆vel de ser implementado, somente se lembre de tomar cuidado com a seguran莽a de sua aplica莽茫o web.

A segunda t茅cnica n茫o necessita de altera莽玫es nas configura莽玫es do servidor web e por isso toda a implementa莽茫o 茅 realizada via c贸digo-fonte da pr贸pria aplica莽茫o e seu uso se torna universal. Esta t茅cnica somente aceita par芒metros enviados via GET e consiste em for莽ar um cabe莽alho indicando que se trata de um arquivo CSS e nome谩-lo com a extens茫o .PHP, assim voc锚 ter谩 um arquivo PHP (poder谩 utilizar todo o poder de programa莽茫o da linguagem) e o mesmo ser谩 tratado como um CSS. Veja o exemplo abaixo:

<?php header('Content-type:text/css'); ?>
 
body {
  background-color: <?php echo (isset($_GET['fundo']) && $_GET['fundo'] == 'verde') ? '#0f0' /* Verde */ : '#00f' /* Azul */; ?>
}

Viu, c贸digo CSS e PHP juntos.

Fonte: PHPIT

Leia mais:

· ·

Todo mundo que acessa a Internet j谩 deve ter ficado com聽raiva聽quando que no momento da leitura de algum texto do nada o site recarrega, isso se chama autorefresh, e sites como Terra, R7, etc abusam deste recurso tornando a navega莽茫o no site um verdadeiro exerc铆cio de paci锚ncia.

Existem basicamente dois motivos para isso, o primeiro 茅 que com o autorefresh do site todo 茅 poss铆vel ganhar mais pageviews, inflando os resultados e consequentemente aumentando o valor cobrado por espa莽os de publicidade e o segundo 茅 para manter o conte煤do sempre atualizado.

Como no caso de manter o conte煤do sempre atualizado existe solu莽玫es muito mais聽polidas聽baseadas em JavaScript (AJAX) acredito que o fator seja o caso inflar os resultados de pageviews mesmo ou em 煤ltima instancia 茅 uma equipe extremamente despreparada que mantem o site.

O lado positivo deste post 茅 que a maioria dos browsers tem op莽玫es que podemos configurar para evitar os aborrecimentos que o autorefresh causa:

  • Chrome: por incr铆vel que possa parecer este browser n茫o tem tal recurso, para isso basta instalar esta extens茫o que o problema estar谩 resolvido;
  • Firefox: basta apontar para聽Ferramentas > Op莽玫es > Avan莽ado e marcar a op莽茫o聽鈥淎lertar se sites tentarem redirecionar ou recarregar a p谩gina鈥;
  • Internet Explorer:聽v谩 para o bot茫o de configura莽玫es (fica ao lado da 鈥渆strela鈥 que indica favoritos) > Op莽玫es da Internet > Seguran莽a > N铆vel Personalizado > procure por 鈥淧ermitir META REFRESH鈥 e marque a op莽茫o 鈥淒esabilitar鈥.

Com isso seus problemas devem ser聽diminu铆dos聽e seria bom que sites de grande porte como Terra, IG e R7 pararem de abusar do autorefresh.

Fonte: Tecnoblog

Leia mais:

· · · ·


Durante o ano de 2010 esteve um planejamento e execu莽茫o o projeto de um Framework para desenvolvimento Web utilizando PHP e JavaScript baseado nas seguintes premissas e necessidades:

  • Deixar o layout livre para qualquer tipo de desenvolvimento (seja utilizando Tableless ou n茫o);
  • N茫o ser t茫o friendly-user como o WordPress, nosso usu谩rio ir谩 desenvolver c贸digo e n茫o arrastar elementos em tela. Centrar-se no poder do desenvolvimento de c贸digo, deixar o desenvolvedor, nosso p煤blico-alvo, fazer a sua m谩gica em PHP;
  • Centrar-se no uso da JQuery como framework JavaScript para suprir todas as necessidades de crossbrowser;
  • Ser livre para o desenvolvedor alterar o c贸digo-fonte do projeto e sugerir novos recursos;
  • Padronizar e formatar a persist锚ncia de dados;
  • Permitir que programadores e desenvolvedores iniciantes em PHP produzam sites e sistemas Web complexos;
  • Facilitar a manuten莽茫o e gest茫o do sistema;
  • 脕rea administrava pronta, com elementos principais utilizados para gest茫o de sites.

Bem pessoal, est谩 apresentado o framework iMais, que pelos testes permite reduzir em at茅 60% do tempo gasto no desenvolvimento de sites e sistemas Web.

Com o c贸digo-fonte aberto e livre 茅 poss铆vel utilizar o framework com os recursos existentes e expandi-lo atrav茅s de desenvolvimento pr贸prio, de forma f谩cil e flex铆vel. Mesmo utilizando o framework n茫o existe a perda de performance, problema comumente encontra em frameworks de mercado.

Nos pr贸ximos dias estaremos liberando para download o conjunto b谩sico, o que significa que no decorrer deste ano iremos investir tempo e recurso para que o framework cres莽a em termos de utilizadores e recursos, facilitando a cria莽茫o de elementos Web ricos.

Vai desenvolver em PHP? Ent茫o utilize o iMais.

Leia mais:

· · · ·


A alguns meses atr谩s a Mozilla precisou adicionar um remendo na linha Firefox 3.x, isso porque scripts JavaScript mal feitos ou estrategicamente programados para isso podiam entrar em colapso e travar todo o browser.

E como o Firefox trabalha com abas, imagine o tamanho do problema.

E a solu莽茫o mais vi谩vel e inteligente seria o Firefox isolar a thread de cada aba, assim como o Chrome j谩 faz, e assim quando um site travar todas as outras abas ficariam protegidas.

S贸 que esta solu莽茫o 茅 complexa demais para ser implementada em um minor update e teremos que esperar a vers茫o 4 do Firefox para ver isso.

Mas a Mozilla nos brindou com um quebra-galho que mais atrapalha do que ajuda.

Agora quando o processamento de um script JavaScript ultrapassar 10 segundos o browser ir谩 emitir um aviso sobre o script lento e se queremos continuar a execu莽茫o ou cancelar.

Pronto, tudo resolvido na terra do Panda de Fogo, ou n茫o!

Esse processo 茅聽anacr么nico, mais confunde o usu谩rio (ainda mais os leigos do que realmente ajuda) e em alguns diversos casos mesmo voc锚 optando por continuar a execu莽茫o o Firefox faz o script se perder atrapalhando ou mesmo impedindo o correto funcionamento de toda a p谩gina.

Qual a solu莽茫o definitiva?

N茫o precisamos chegar ao ponto extremo de utilizar a bomba do Internet Explorer, ent茫o temos que optar para o Opera (quem ningu茅m utiliza) ou ir para o Chrome que parece ser o caminho mais natural para os usu谩rios do Firefox e que est茫o insatisfeitos.

Fica aqui a dica para o uso do Chrome.

E para voc锚 Mozilla, melhor sorte da pr贸xima vez.

Leia mais:

·


Imagine a seguinte necessidade, voc锚 tem um formul谩rio HTML, e conforme o usu谩rio vai preenchendo os dados 茅 preciso alterar os dados dos campos seguintes desse mesmo formul谩rio.

Essa tarefa pode ser realizada, utilizando somente PHP, por茅m ser谩 necess谩rio alguns reloads no formul谩rio que pode irritar algum usu谩rio mais exigente e ainda teremos que criar uma s茅rie de controles para isso.

Qual a solu莽茫o ent茫o?

Podemos utilizar JQuery para isso.

Como vimos nas m谩scaras utilizar JQuery al茅m de simples pode deixar sua aplica莽茫o Web muito mais elegante e funcional, vamos ao exemplo.

Supondo que eu queira retornar o campo rua (que cont茅m o nome da rua) ap贸s consultar o CEP informado pelo usu谩rio. Come莽aremos pelo script HTML que gera o formul谩rio Web. Vamos criar um div e colocar em seu id a string “retorno”.

<input type="text" name="cep" id="cep" value="<?php echo $cep; ?>" size="10" maxlength="10"/>
<input type="button" name="cCep" id="cCep"聽 value="Procurar" onclick="javascript:return chCEP(2, document.novoCliente.cep)"/>
 
<div id="retorno"></div>

No exemplo acima podemos observar que o bot茫o “Procurar” dispara uma fun莽茫o JavaScript, o conte煤do dessa fun莽茫o 茅 o seguinte:

function chPage(acao, campo){
 jQuery(function($){
  $("#retorno").load("buscaCep.php", {acao: acao, cep: campo.value} );
 });
}

Viram o pulo do gato nessa fun莽茫o?

Ela dispara o script PHP buscaCep.php passando duas vari谩veis via POST, a primeira 茅 a vari谩vel acao e a outra cep.

Essas duas vari谩veis servem para que o script PHP execute uma consulta a um banco de dados qualquer e retorne HTML puro, ou seja, o seu retorno seria:

<input name="rua" id="rua" value="Rua pesquisada" />

E essa parte da fun莽茫o JavaScript - $(“#retorno”) - serve para indicar em qual objeto do formul谩rio o HTML de retorno ser谩 inserido.

Viram que interessante, de uma p谩gina HTML que 茅 na verdade um formul谩rio HTML eu chamo e executo um script PHP e consigo inserir em tempo de execu莽茫o o HTML retornado do script PHP sem a necessidade de reload em todo o formul谩rio.

Leia mais:

·


Continuando a falar das facilidades de desenvolvimento trazidas com a JQuery, vou explicar como fazer de forma simplificada como fazer m谩scaras utilizando a JQuery.聽Observem聽o c贸digo abaixo:

jQuery.noConflict();
jQuery(function($){
	$("#cnpj").mask("99.999.999/9999-99");
	$("#cep").mask("99.999-999");
});

Perceberam a facilidade?

Funciona da seguinte forma:

A primeira linha tem a fun莽茫o de evitar conflitos com outros scripts JQuery ou JavaScript puro que voc锚 possa ter na sua p谩gina.

A segunda linha iniciamos a fun莽茫o na sintaxe do JQuery.

A terceira linha temos o ID do nosso elemento HTML que ir谩 receber a mascara (no caso 茅 um text) e em seguida definimos a m谩scara, sem nenhum segredo, sem c贸digos miraculosos.

Sem mais nada.

Simples e funcional em todos os browsers modernos.

Leia mais:

·

Conhecendo a JQuery


Eu n茫o sou muito f茫 de frameworks, at茅 porque um framework pode engessar de forma desnecess谩ria a sua aplica莽茫o e voc锚 fica dependente da ferramenta para prestar manuten莽茫o e/ou atualizar sua aplica莽茫o, por茅m em alguns casos temos que tirar o chap茅u para um framework.

脡 o caso do JQuery, que 茅 um framework para JavaScript que tem por finalidade diminuir a complexidade de desenvolvimento de software web e minimizar a incompatibilidade do c贸digo JavaScript entre navegadores, al茅m de possuir a possibilidade de implementa莽茫o segura de efeitos e CSS via ado莽茫o de plugins.

Com o JQuery podemos abranger m谩scaras, valida莽玫es complexas em formul谩rios at茅 mesmo efeitos de transi莽茫o entre p谩ginas, tudo isso sem a grande preocupa莽茫o de desenvolvedores JavaScript que 茅 a compatibilidade do c贸digo-fonte entre os diversos navegadores dispon铆veis no mercado.

A sua instala莽茫o 茅 simples, podemos fazer o download da vers茫o de produ莽茫o do pr贸prio site do JQuery e depois para utilizar ele em uma p谩gina basta utilizar a seguinte linha na tag HTML header:

<script src="Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>

Leia mais:

· · · ·

Arquivos

Theme Design by devolux.nh2.me