Jump to content


Photo

Bibliotecaajax


  • Faça o login para participar
2 replies to this topic

#1 MisterFoot

MisterFoot

    12 Horas

  • Usuários
  • 274 posts
  • Sexo:Não informado

Posted 25/10/2008, 10:03

Bom galera, estou desenvolvendo um site com diversos scripts em ajax, mais estou com um problemão, é que sempre da erro quando tento executar vários scripts de uma vez.

É o seguinte, abaixo está a biblioteca em ajax que estou utilizando, nela tem a opção trataDadosEnquete(); que corresponde ao sistema de enquete, mais eu tenho outros sistemas que quero implementar como por ex. trataDadosComentario() e trataDadosNoticias() no BibliotecaAjax.js.

Neste caso eu rodo todos ao mesmo tempo a partir do onload, como nessa biblioteca têm apenas o trataDadosEnquete(), como faço para implementar nesta biblioteca os outros trataDadosComentario() e trataDadosNoticias()?

trataDadosEnquete() deverá executar quando eu chamar o método requisicaoHTTP("GET","enquete.php",true);
trataDadosComentario() deverá executar quando eu chamar o método requisicaoHTTP("GET","comentario.php",true);
trataDadosNoticias() deverá executar quando eu chamar o método requisicaoHTTP("GET","noticias.php",true);

BibliotecaAjax.js
var ajax;
var dadosUsuario;
var idTimeout;

// ------- cria o objeto e faz a requisição -------
function requisicaoHTTP(tipo,url,assinc){
	if(window.XMLHttpRequest){	  // Mozilla, Safari,...
		ajax = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject){	// IE
		ajax = new ActiveXObject("Msxml2.XMLHTTP");
		if (!ajax) {
			ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}	  
	
	if(ajax)	// iniciou com sucesso
		iniciaRequisicao(tipo,url,assinc);
	else
		alert("Seu navegador não possui suporte a essa aplicação!");
}

// ------- Inicializa o objeto criado e envia os dados (se existirem) -------
function iniciaRequisicao(tipo,url,bool){
	ajax.onreadystatechange=trataResposta;
	ajax.open(tipo,url,bool);
	idTimeout = setTimeout(tempoEsgotado, 10000);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	//ajax.overrideMimeType("text/XML");   /* usado somente no Mozilla */
	ajax.send(dadosUsuario);
}


// ------- Inicia requisição com envio de dados -------
function enviaDados(url){
	criaQueryString();
	requisicaoHTTP("POST",url,true);
}


// ------- Cria a string a ser enviada, formato campo1=valor1&campo2=valor2... -------
function criaQueryString(){
	dadosUsuario="";
	var frm = document.forms[0];
	var numElementos =  frm.elements.length;
	for(var i = 0; i < numElementos; i++)  {
		if(i < numElementos-1)  {
			dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&";
		} else {
			dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value);
		}
	}
}

// ------- Trata a resposta do servidor -------
function trataResposta(){
	if(ajax.readyState == 4){
		clearTimeout(idTimeout);
		if(ajax.status == 200){
			trataDadosEnquete();
		} else {
			alert("Problema na comunicação com o objeto XMLHttpRequest.");
		}
	}
}

// ------- Atingiu o tempo limite -------
function tempoEsgotado(){
	ajax.abort();
	alert("Problema na comunicação com o servidor. Tente acessar mais tarde.");
}

Eu consegui fazer isso coloca uma biblioteca para cada trataDados e outra forma que consegui é executa um, e dps que executa esse ai sim executa o outro... mais em questão de desempenho isso não é legal, então gostaria de saber como executar todos ao mesmo tempo.

Caso não tenha sido claro favor avisar que tento explicar melhor.

Edição feita por: MisterFoot, 25/10/2008, 10:04.

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
MisterFoot
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

#2 silici0

silici0

    ?

  • Usuários
  • 902 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:PHP, MySQL, XHTML, CSS, AJAX, JavaScript, Objective-C, Python, Games ... #geek

Posted 27/10/2008, 17:30

A grande questão é, ajax não tem tempo de resposta... então não existe um garantia de tempo de retorno;

onload="xis()";

function xis()
{
trataDadosComentario();
trataDadosNoticias();
trataDadosEnquetes();
}

Acho que é isso...

Abraços
Procurando freelancer
***********************************************
Bachelor of Technology in Technology of Information, with great knowledge in Windows operating systems and Unix-Like (BSD, Ubuntu and Slackware), languages (PHP, JavaScript and MySQL), semantic (DHTML, Tableless, Ajax, MVC, OO) and analysis (manages projects based on PMI).
Developer in PHP, JAVA, Python, Objective-c MySQL, DHTML, CSS, JAVASCRIPT, JQUERY, JSON, SMARTY, MDB2, DOCTRINE, CAKEPHP. Linux desktop for work and MacOS. E-commerces, CRM and bussiness strategys
Love-me and be FREE use UniCes-Like .

#3 MisterFoot

MisterFoot

    12 Horas

  • Usuários
  • 274 posts
  • Sexo:Não informado

Posted 28/10/2008, 12:31

silici0,
mais se eu fazer como vc falou, para quando fazer o onload executar os trataDados() poderá fazer com que ocorra erro, por que dessa forma vc nao está utilizando a bibliotecaAjax.js, vc está chamando direto o trataDados().
\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
MisterFoot
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq