Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galera do iMasters.
Passei a tarde toda pesquisando sobre isso.
É o seguinte.
Eu tenho uma requisição $.ajax:
$.ajax({
url: 'modules/uXML/inc/capture.php',
success: function(data){
$('div#xml-retorno').append(data);
}
});@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++){ob_end_flush();}
ob_implicit_flush(1);
$i = 0;
while($i < 5){
echo $i . '<br / >';
flush();
sleep(1);
$i++;
}O que achei foi esse flush(); do PHP, onde parece que ele força o arquivo mandar o resultado na hora que foi criado, e não no final de tudo.
Preciso disso pois estou criando um sistema de log na tela, onde a cada laço uma mensagem deve ser exibida.
Então galera, o que estou fazendo de errado?
Agradeço a ajuda de todos..
Boa tarde..
Cara só consegui fazer isso usando iframe, crio um elemento iframe com JS ele roda em background usando o flush() e nele dou os prints com as funções de loading em JS.
Estou saindo aqui por isso poste meio corrido...rs. mais tarde volto ae.
Abs
Uma técnica simples é o "long pooling"
Dá uma googlada..
exemplo fácil: http://elikirk.com/2012/04/17/php-ajax-long-polling-comet-demonstration/
@Paulo.. Na verdade isso que eu quero fazer não é tão necessário para o que realmente preciso. Mas seria interessante para o usuário.
O cliente quer um sistema que leia XMLs (XMLs de notícias da Agência O Globo, que eles fornecem em uma pasta no FTP do site) em uma pasta, e coloque os dados desses XML automaticamente no banco de dados, então eu quero retornar um LOG, mostrando o que o sistema está fazendo. Então estou usando jQuery para rodar esse $.ajax de minuto a minuto, e o resultado do PHP é retornado dentro de uma div.
Obs.: Já tenho o sistema que lé o XML e coloca no banco de dados, mas é todo manual, o cliente tem que selecionar os arquivos.
Não tenho o sistema todo pronto ainda, mas o que quero é isso: "Encontrou os arquivos que não são repetidos? Mostra um echo, colocou ele no banco? Mostra um echo escrito SUCESSO, e assim sucessivamente..
Quero isso por que, alem desse sistema de log que estou fazendo, isso me ajudaria a melhorar alguns módulos no CMS de minha empresa pros clientes.
Pra que esse for?
Uma vez eu utilizei essa tecnica pra fazer um progressbar pra um sistema de importação de planilhas.
Mas eu não coloquei o flush dentro do laço, coloquei ele antes, e antes do flush coloquei um ob_flush.
Além disso, eu tinha tentando usar o ini_set('implicit_flush',1), no fim eu comentei isso, não precisou, mas usei um tal de ini_set('output_buffering','on');
E ainda tive que tirar alguns limites do servidor, de timeout, tempo máximo de execução, e memoria.
@jhrhp, eu peguei esse código pronto na internet, nos vários exemplos que vi, mas é tudo em inglês.
Na verdade, eu não sei muito bem pra que que server, essa função flush(); e ob_flush(); eu nem sabia que existiam..
Mas ai? Como vc fez a progress bar?
Bom, analisando seu código, a única coisa que vejo é que o resultado demorará 5 segundos para retornar, nada mais... :closedeyes:
Quando é que você chama esse Ajax? Obviamente que esse PHP é só um exemplo, mas o que pretende retornar via Ajax?