PDA

View Full Version : سوال: نمایش لحظه‌ای خروجی php با آژاکس



mehran_gh
سه شنبه 21 اردیبهشت 1389, 14:59 عصر
سلام
چطوری میشه اطلاعاتی که با php در حال پردازش هست رو در همون لحظه با آژاکس نشون داد؟
برای مثال در کد php زیر :


for ($i; $i <= 100 ; $i++){
echo $i;
}

میخوام محتویات متغیر $i رو در همون لحظه در یک تگ مشخص نشون بده.

یعنی مثلاً در لحظه ای که متغیر برابر 4 هست، <div id="target">4</div> و در لحظه ای که متغیر برابر 5 هست، <div id="target">5</div> و همینطوری تا وقتی حلقه for در حال اجرا است ، محتویات متغیر رو با استفاده از آژاکس در تگ مشخص شده ای نشون بده.

صابر طهماسبی
سه شنبه 21 اردیبهشت 1389, 16:47 عصر
شما باید از تابع setInterval در جاوا اسکریپت استفاده کنید و بر اساس یک زمان خاص مثلا هر یک ثانیه در خواست را به اسکریپت php ارسال کرده و نتیجه را دریافت نمایید.
اما اون حلقه ای رو که نوشتید چون خیلی سریع به اتمام می رسه گمان نکنم بتوان لحظه به لحظه با آژاکس همون خروجی رو دریافت کرد.
فرض کنید اگر بتوانید setInterval را روی کمترین زمان ممکن تنظیم کنید بازهم ارسال درخواست از مرورگر توسط آژاکس به اسکریپت php زمانی را صرف می کند و همین زمان برای تولید کامل خروجی کافی است.

می توانید در داخل حلقه ی php از sleep استفاده کنید.

rapidpich
سه شنبه 21 اردیبهشت 1389, 18:49 عصر
آژاکس یعنی اینکه تو از این طرف(client) دستور میدی و بدون اینکه صفحه عوض بشه یک جواب میگییری و پردازش میکنی.
چیزی که تو میخای اینه:




ob_start();
for ($i; $i <= 100 ; $i++){
echo $i;
ob_flush();
flush();
sleep(1);
}





البته من اون sleep(1) رو گذاشتم برا اینکه آروم آروم چاپ کنه دقیقا ببینی چه اتفاقی میافته ولی بقیش لازمه

mehran_gh
پنج شنبه 23 اردیبهشت 1389, 14:12 عصر
سلام
کدی که شما گذاشتید با php پشت سر هم اعداد رو نشون میده، من طوری میخوام که عدد جدید رو به جای عدد قبلی بنویسه، مثلاً مثل درصدی که رپیدلیچ واسه انتقالش نشون میده.

rapidpich
پنج شنبه 23 اردیبهشت 1389, 15:24 عصر
اینکارو با javascript باید انجام بدی. رپیدلیچ آژاکس نیست اما این کارو میکنه. من جاواسکریپت بلد نیستم اما با jquery راحت میشه اینکارو انجام داد.



$("#timer").html('1');
$("#timer").html('2');
$("#timer").html('3');

mehran_337
شنبه 25 اردیبهشت 1389, 09:04 صبح
آژاکس یعنی اینکه تو از این طرف(client) دستور میدی و بدون اینکه صفحه عوض بشه یک جواب میگییری و پردازش میکنی.
چیزی که تو میخای اینه:




ob_start();
for ($i; $i <= 100 ; $i++){
echo $i;
ob_flush();
flush();
sleep(1);
}






البته من اون sleep(1) رو گذاشتم برا اینکه آروم آروم چاپ کنه دقیقا ببینی چه اتفاقی میافته ولی بقیش لازمه




كد شما را اجرا كردم اين جواب و داد :


01234567891011121314151617181920212223242526272829
Fatal error: Maximum execution time of 30 seconds exceeded in c:\wamp\www\a\1.php on line 9

Arman_gh
شنبه 25 اردیبهشت 1389, 10:55 صبح
چطوری میشه اطلاعاتی که با php در حال پردازش هست رو در همون لحظه با آژاکس نشون داد؟
راهکار مشکل شما comet هست نه AJAX. در تاپیکی دیگری این موضوع رو جواب داده بودم.
http://barnamenevis.org/forum/showthread.php?t=216063