Jump to content


Photo

Ajax Em Loop


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

#1 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 27/07/2006, 16:01

Opa ... ;)

Seguinte...

Preciso efetuar N requisições à um determinado servidor. Pensando que tudo era flores, coloquei a requisição AJAX dentro de um loop e pronto. :D

Porém... acontece que o script não espera a resposta do servidor. Se eu quiser mostrar o progresso da operação, o progresso será carregado instantâneamente, e após isso, começarão as requisições. =/

Ou seja, ao invés de o script esperar a resposta do servidor para seguir em frente no loop, ele percorre o loop todo e a partir daí começam as requisições. :huh:

Alguém tem idéia do que pode ser feito numa situação como esta ? :(

Encontrei uma documentação [ https://bpcatalog.de...bar/design.html ] que, creio eu, seria o que eu quero, porém, não entendi muito bem não. :unsure:

[]’s :DAté mais

#2 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 27/07/2006, 16:38

hmmmmmm

O que precisa fazer é, de algum jeito, o evento onReadyState dê o comando para prosseguir nos loops.

Uma idéia que podia tentar é assim:

var matriz_com_todos_os_items;

function requisitar()
{
  pega o próximo índice que não foi requisitado, se não tem mais, return false, bye bye, gogogo fall back
  faz a requisição
  elimina esse índice da matriz
}

function onReadyStateChange()
{
  traz o resultado
  faz o callback da função que envia as requisições
}

Acho que aplicando dessa forma resolveria, não?
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#3 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 27/07/2006, 17:43

Eita ! :blink:

Antes de eu postar eu havia lido aquele documento, mesmo a resposta estando na minha cara, eu não consegui entendê-lo. Agora com o teu post me veio uma luz e acabo de conseguir ! =)

Valeu por me iluminar, rs ! ;)

A parada é exatamente o que tu disse mesmo. (y)

Show de bola ! :D

[]’s :D Até mais

#4 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 28/07/2006, 07:53

Eu nem olhei a página, mas ta salva aqui nos Bookmarks, pelo título, achei que com ela poderia se capturar o progresso do AJAX, e até mesmo, criar um índice de porcentagem.

É disso que se fala no documento, ou é esse envio por partes? :wacko:
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 28/07/2006, 18:52

Eu nem olhei a página, mas ta salva aqui nos Bookmarks, pelo título, achei que com ela poderia se capturar o progresso do AJAX, e até mesmo, criar um índice de porcentagem.

É disso que se fala no documento, ou é esse envio por partes? :wacko:

Bem, sei lá ! :P

Acho que é sobre o progresso de uma requisição múltipla, como eu estava querendo fazer. Envia-se N requisições, imprime-se o progresso, e determina se as requisições continuarão ou não. Foi isso que eu entendi. :wacko:

Pelo menos deu certo aqui, he he. :D

[]’s :DAté mais

#6 DaNi-eL

DaNi-eL

    Novato no fórum

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

Posted 08/08/2006, 10:58

Isso pode ser feito

utilize ajax.open("GET", pagina, false);
ao inves de ajax.open("GET", pagina, true);
para a tua função esperar o resultado do ajax
antes de prossegrir desta forma vc estara trabalhando com ajax
de maneira assincrona; é eficiente e resolve nestes casos.

abraços

#7 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 09/08/2006, 07:27

Discordo, o nome AJAX se deve ao fato das requisições assíncronas, por isso indicar a flag TRUE, você vai enviando as requisições sem ter que aguardar pela resposta para poder continuar o resto do processo. Indicando FALSE além de não ser mais um processo assíncrono, se por acaso você pegar um servidor meio estranho (o meu é realmente ruim) e ele não enviar a requisição você trava o navegador ... :P , mas pelo menos nesse caso funciona, você aguarda 1 requisição por vez, já ser eficiente é outra história ....
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#8 Rosemeire da Silva

Rosemeire da Silva

    Rosemeire da Silva

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

Posted 17/08/2006, 13:49

Oi Paulo Ricardo... Tem como você postar como foi sua solução?

Obrigada ;)

Edição feita por: Rosemeire da Silva, 17/08/2006, 13:52.

Rosemeire da Silva
Analista de Sistemas

#9 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 17/08/2006, 15:45

Oi Paulo Ricardo... Tem como você postar como foi sua solução?

Obrigada ;)

Claro ! :D

Segue um exemplo funcional da idéia... :rolleyes:

<html>
  <head>
    <title>AJAX em loop</title>
    <script type="text/javascript">
// Objeto AJAX
var AJAX;
// Vetor de links
var links   = new Array('http://localhost/call.php?uri=http://www.google.com', 'http://localhost/call.php?uri=http://www.microsoft.com', 'http://localhost/call.php?uri=http://www.apple.com'); // Usei o servidor local para chamar as requisições de fora porque o JavaScript não permitiria fazer isso diretamente >.<
// Link atual
var current = 0;
// Total de links
var count   = links.length;

// Cria objeto AJAX
if (window.XMLHttpRequest) {
    try {
        AJAX = new XMLHttpRequest();
    } catch (e) {
        AJAX = false;
    }
} else if (window.ActiveXObject) {
    try {
        AJAX = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e) {
        try {
            AJAX = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e) {
            AJAX = false;
        }
    }
}

// Função que faz as requisições
function request(button)
{
    if (current != count) {
        button.disabled  = true; // desativa botão
        button.innerHTML = 'Requisitar (' + Math.round(((current + 1) / count) * 100) + '%)'; // mostra progresso

        if (AJAX) {
            AJAX.open('GET', links[current], true);
            AJAX.onreadystatechange = function()
            {
                if (AJAX.readyState == 4) {
                    // Faça o que quiser aqui =D

                    if (AJAX.status == 200 || AJAX.status == 302) {
                        // Ok
                    } else {
                        // Falhou !
                    }

                    current++;
                    setTimeout(request(button), 1000); // Usei setTimeout para não sobrecarregar o servidor =D
                }
            }
            AJAX.send(null);
        }
    } else { // fim
        current = 0; // isto torna possível chamar a função novamente =D
        button.disabled  = false; // ativa botão
        button.innerHTML = 'Requisitar'; // volta ao estado inicial
    }
}
    </script>
  </head>
  <body>
    <button type="button" id="btn"  onclick="request(this);">Requisitar</button>
  </body>
</html>
Bem... comentei o que achei importante diretamente no código. Se houver dúvida é só retornar à postar ! =)

[]’s :DAté mais

#10 Rosemeire da Silva

Rosemeire da Silva

    Rosemeire da Silva

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

Posted 30/08/2006, 08:43

Obrigada Paulo...
Consegui um exemplo também para se fazer mais de uma requisição de pedido com ajax segue link:

http://www.tableless.../ajaxdemo2/?i=3

A idéia e que a requisição entre em uma fila ;)

var http_request = false; // variavel que receberá o objeto xmlhttprequest
		conteudo = false;// variavel que receberá a div onde será atualizado o conteúdo
		fila=[];
		ifila=0;


	// Inicial o AJAX
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
			// See note below about this line
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
		   try {
			  http_request = new ActiveXObject("Microsoft.XMLHTTP");
		   } catch (e) {}
		}
	}

	function fila_execucao(metodo, url, div, url_redireciona, parametro){
		//Adiciona à fila
		fila[fila.length]=[metodo, url, div, url_redireciona, parametro];
		//Se não há conexões pendentes, executa
		if((ifila+1)==fila.length)requisita_pedido();
	}


	function requisita_pedido() {
		if (!http_request) {
			location=fila[ifila][3];
			return false;
		}
		http_request.open(fila[ifila][0],fila[ifila][1],true);
		http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		http_request.onreadystatechange=function() {
			if (http_request.readyState==4){
				//Mostra o HTML recebido
				retorno=unescape(http_request.responseText.replace(/\+/g," "))
				document.getElementById(fila[ifila][2]).innerHTML=retorno
				//Roda o próximo
				ifila++
				if(ifila<fila.length)setTimeout("requisita_pedido()",20)
			}
		}
		var params = fila[ifila][4];
		http_request.send(params);
	}

Rosemeire da Silva
Analista de Sistemas

#11 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 27/09/2017, 17:16

Diflucan Online Buying Viagra cialis price Buy Xenical Online New Zealand
Where To Order Doryx Jersey Citybuy Vigora 100 Viagra Vs Propecia Generics Med Indian cialis buy accutane no rx Urologo Priligy Amoxicillin Uses For Dogs

#12 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 13/10/2017, 16:43

Keflex Interaction With Alcohol online pharmacy Generic Hydrochlorothiazide Tablet Without Perscription Generic Cialis Lowest Price Cialis Per Nachname Rezeptfrei
Kamagra Gels Sertraline Propecia Periodo Fertil viagra Propecia Spain Disfuncion Erectil Atenolol Viagra No Presciption
Progesterone Find From Canada Amoxicillin Carbonic Acid Viagra Chino levitra prices Generico Viagra Madrid Ditrim 480 Mg Furosemide 40 Mg Buy Online
Site Officiel Vente Cialis Sibutramina Compra En Usa Zithromax Kills Chlamydia viagra online prescription Wirkung Cialis 20 Levitra Wirkung Lasst Nach

#13 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 30/10/2017, 04:44

Cialis Rezeptfrei Kaufen Per Nachnahme Dapoxetine Price Buy Tadalista Online buy levitra online Cheapest Cialis India Viagra Precio Generico Levitra Vergessen

#14 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 30/10/2017, 09:44

Reputable Ed Pills Canada Phenergan Without Prescription Fast Dapoxetina Priligy viagra online prescription Levitra Generico 20 Mg Prezzo

#15 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 30/10/2017, 14:01

Canadian Pharmacy Levetra viagra Cialis 5 Mg Daily Canada




1 user(s) are reading this topic

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

IPB Skin By Virteq