öncelikle yanlış bir konu açtıysam ve ya yanlış yere açtıysam özür dilerim. ama bulamadım forumda.
ob_flush ve flush ile döngü içindeki anlık sonucu yazdırabiliyorum. ama sorunum sayfaya ajax ile veri gönderip döngü içindeki sonucu anlık olarak ekrana yazdırmak yapamadım yardımcı olurmusunuz?
php döngü içindeki değerleri anlık olarak ajax ile çekme
10
●8.138
- 17-11-2012, 02:08:37sayfaya ajax ile veri gönderemezsiniz (gönderirsiniz; cron jobs veya başka bir tetikleyici dosya ile bir adet veritabanı veya bir veri dosyası), ama sayfaya ajax ile veri çağırabilirsiniz. Bu da client side tarafında olacağı için php ile bağlantı kurmanız için yine bir kontrol olayına ihtiyacınız var.
Eğer bu ihtiyacınız başka bir dosyada oluşan aksiyonları veya çıktıları tarayıcıda çalıştırdığınız bir dosyada görüntülemek ise, ajax ile o sayfadan size hangi sonuçları gönderiyor ise ekrana yansıtırsınız. jquery kütüphanesi ile kolayca yapılır. - 17-11-2012, 02:18:02cevap için teşekkür ederim ama ya ben sizin cevabınız anlayamadım kusura bakmayın yada sorumu anlatamadım. sonuc.php dosyasını çalıştırdığım zaman döngü içindeki değerleri bir bir ekrana yazdırıyorum. benim istediğim ise bu bir bir ekrana yazdırma işlemini ajaxla çekmek.
$limit=5;
for( $i = 1 ; $i <= $limit ; $i++ )
{
echo $i."<br>";
flush();
ob_get_contents();
ob_flush();
sleep(1);
}
bu kod ile php sorunsuz çalışıyor.ama dönen sonuc ajxla çekmek istiyorum umarım anlatabilmişimdir. - 17-11-2012, 02:24:59bu kodları başka bir dosyaya isim vermek gerekirse b.php'ye yazıp aynı klasöre atın.
sonrasında a.php'den bu dosyayı ajax ile çağırın.
ajax fonksiyonunuzu da setInterval fonksiyonu içine alırsanız bu fonksiyonu belirli saniye aralıklarıyla çalıştırabilir, b.php'de aktarılan veriyi ekranınıza alırsınız.
<script type="text/javascript">
setInterval(function(){
//ajax ile b.php'yi çağırıyorum ve gelen sonucu document.getElementById('result').innerHTML = result;
//result id'sine sahip olan elemana yazıyorum.
}, 2000);
</script> - 17-11-2012, 02:32:47zaten php dosyasını çağırınca kodlar çalışmaya başlıyor ve bi döngü başlıyor. ben döngünün her seferdeki sonucu çekmek istiyorum. sayfayı belirli aralıklarla çağırırsam her seferinde döngü yeniden başlar.
<script type="text/javascript">
function gonder(){
$.ajax({
type:'POST',
data:$('form#uye').serialize(),
url:'tekmesaj.php',
success: function (msg) {
$("#sonuc").html(msg);
}
});
}
</script>
bu kodla döngünün her seferini çekmeye çalışıyorum. - 17-11-2012, 02:48:48ilk aklıma gelen döngünün nerede kaldığını bir yere log edip sonraki çağrılışlarda kaldığı yerden devam etmesi.
Ya da şöyle olabilir, tekmesaj.php dönen sonucu bir javascript değişkeni ya da json verisi olarak döndürürsünüz. json ile yapmak için tekmesaj.php de echo json_encode($result); gibi yapmalısınız.
$result['html'] = ''; //burada çıktıyı tutabiliriz
$result['loop'] = 4; //burada döngünün adımını tutarız
json sonucunda gelen loop değerini tekrar post ile göndeririz. Sonrasında tekmesaj.php post ile gelen veriyi değerlendirip 5.adımdan devam eder. - 17-11-2012, 02:58:34hocam pek anlayamadım. bi örnek gösterme imkanınız varmı acaba? asıl yapmak istediğimi anlatayım belki açıklığa kavuşur olay. site üzerinden bütün üyelere mesaj gönderiliyor. mesaj bilgilerini ajaxla post ediyorum doğal olarak bi sonuç dönüyor. ama döngü bittikten sonra benim istediğim her seferinde şu üyeye mesaj gönderildi. kalan kişi şukadar şeklinde değer döndürmek istiyorum. ajax işin içine girmezse sıkıntı yok ama ajax döngünün bitmesini bekliyor. çok forum okudum akşamdan beri herkes pes edip ajax tan vazgeçmiş. bende pek vazgeçmek niyetinde değilim. ondan bu kadar ısrarım.
- 17-11-2012, 12:34:56sağlam olanı veritabanına bağlayın, bir tablo işinizi görecektir. session'da da tutabilirsiniz ama hataya yol açabilir.
Yani tabloda olacak kolonlar : mesaj_id, uye_id, durum, zaman
Sorgunuzu da bu mesaj bu üyeye durumu = 1 olarak tablomda kayıtlı mı kayıtlı değil mi şeklinde olacak.
ya da $_SESSION['mesajlar'][$uye_id] şeklinde mesaj gidince geçici kayıt altına alırsınız.
Eğer set edilmiş ise bu veri tekrar göndermezsiniz. Bu session sizin oturum açtığınız tarayıcı için, yani tarayıcı ile yapılmayacaksa işlemleriniz sıkıntı çıkarabilir. - 18-11-2012, 00:48:26hocam teşekkür ederim anlattığınız gibi çözdüm olayı ama bu defada şöyle bi sıkıntım var gönderme işlemi bitince başa dönüp tekrardan başlıyor. setInterval ile 5 saniyede bir post işlemini gerçekleştiriyorum işlem bittiğinde setInterval komutunu nasıl devre dışı bırakabilirim. kusura bakmayın çok yordum sizi