Ajax Em Loop
#1
Posted 27/07/2006, 16:01
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.
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.
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.
[]s Até mais
#2
Posted 27/07/2006, 16:38
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?
#3
Posted 27/07/2006, 17:43
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.
Show de bola !
[]s Até mais
#4
Posted 28/07/2006, 07:53
É disso que se fala no documento, ou é esse envio por partes?
#5
Posted 28/07/2006, 18:52
Bem, sei lá !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?
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.
Pelo menos deu certo aqui, he he.
[]s Até mais
#6
Posted 08/08/2006, 10:58
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
Posted 09/08/2006, 07:27
Yeah I do have some stories, and it's true I want all the glory ...
#8
Posted 17/08/2006, 13:49
Obrigada
Edição feita por: Rosemeire da Silva, 17/08/2006, 13:52.
Analista de Sistemas
#9
Posted 17/08/2006, 15:45
Claro !Oi Paulo Ricardo... Tem como você postar como foi sua solução?
Obrigada
Segue um exemplo funcional da idéia...
<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 Até mais
#10
Posted 30/08/2006, 08:43
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); }
Analista de Sistemas
#11
Posted 27/09/2017, 17:16
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
Posted 13/10/2017, 16:43
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
Posted 30/10/2017, 04:44
#14
Posted 30/10/2017, 09:44
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)