ورود

نسخه کامل مشاهده نسخه کامل : چطور وقتي ميل باكسم بازه با ورود ايميل جديد در inbox من بدون refresh كردن ميتونم ببينمش؟



Pejvak61
02-12-2014, 17:36
سلام.

هميشه برام جاي سئوال بوده كه وقتي دارم inbox مثلاً gmail خودمو ميبينم بدون اينكه refresh كنم به محض دريافت ايميل جديد مياد و در ليست inbox من قرار ميگيره. البته من ميدونم كه اين از امكانات AJAX هستش اما طريقه اين كارو درك نميكنم. آيا در فواصل زماني مشخص اقدام به اجراي دستوري ميشه يا اينكه امكانات ديگري هست.

من طي تحقيقي كه انجام دادم متوجه شدم كه AJAX از شيئي به نام XML[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] براي رد و بدل كردن ديتا با سرور در پشت صحنه استفاده ميكنه و با responsetext هم خروجي مربوطه را توليد ميكنه. اما اين كه چه طور اين كار انجام ميشه را درك نميكنم به خصوص زماني كه متدهاي open و send بعد از دستور responsetext در كد نويسي قرار ميگيره. حالا در مورد ايميل هم همينطور كي اين فراخواني انجام ميشه كه به محض ورود ايميل جديد در صفحه وب بدون refresh نمايش داده ميشه.

مثلاً در كد زير :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Pejvak61
06-12-2014, 14:11
همونطور كه ميدونيد xml[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] يك property است كه وضعيت ارتباط را نشون ميده و تابعي كه موقع رخداد onreadystatechange فراخواني ميشه كار اصلي را انجام ميده.

من با بررسي هايي كه انجام دادم متوجه شدم به شرط وجود يك ارتباط سالم اين رخداد (onreadystatechange) به تعداد 4 بار به وقوع مي پيونده. و تنها در صورتي كه در حالت 4 باشه و وضعيتش هم OK باشه ميشه واكشي اطلاعات را انجام داد.

اما هيچگاه نديدم كه از سرور به طور مكرر اطلاعاتي درخواست كنه و سرور هم بهش پاسخ بده. به محض تمام شدن ارتباط ديگه همه چي راكد ميمونه.
گمان ميكنم در اينصورت بايد به طور تصنعي اين پرس و جو را مكرراً ايجاد كنيم كه اون هم با استفاده از دستور window.setTimeout انجام ميشه. در حقيقت تابعي كه اطلاعات را به روز ميكنه توسط اين دستور هر x ميلي ثانيه يك بار اجرا ميشه.

ولي اين روش چندان ايده آل نيست. من انتظار داشتم راهي وجود داشته باشه كه مثلاً منتظر پاسخ سرور بمونه تا سرور بهش اطلاعات بده نه اينكه در پريود زماني مشخصي تابعي را كه كار واكشي اطلاعات را برعهده داره فراخواني كنيم.

vahid78
06-12-2014, 15:49
درود.

از تکنیک Comet برای این نوع موارد استفاده میشه.
Comet در واقع یک راه حل برای دریافت Event از سمت سرور هست
Comet برای باز نگه داشتن طولانی کانکشن جهت ارسال داده از سرور به مرورگر (یعنی برعکس درخواست های متداول) استفاده میشه و الان هم خیلی از سرویس ها از این روش استفاده میکنند


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Pejvak61
07-12-2014, 13:31
درود.

از تکنیک Comet برای این نوع موارد استفاده میشه.
Comet در واقع یک راه حل برای دریافت Event از سمت سرور هست
Comet برای باز نگه داشتن طولانی کانکشن جهت ارسال داده از سرور به مرورگر (یعنی برعکس درخواست های متداول) استفاده میشه و الان هم خیلی از سرویس ها از این روش استفاده میکنند


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ممنونم دوست عزيز. به شكرانه ي باز شدن اين دريچه ي ارزشمند در صورت پياده سازي موفقيت آميز قطعاً نمونه كدي را جهت يادگيري ديگر دوستان در اينجا قرار خواهم داد.

vahid78
07-12-2014, 18:47
ممنونم دوست عزيز. به شكرانه ي باز شدن اين دريچه ي ارزشمند در صورت پياده سازي موفقيت آميز قطعاً نمونه كدي را جهت يادگيري ديگر دوستان در اينجا قرار خواهم داد.

پیشتر یکی از دوستان یک نمونه از موارد Comet را انجام داده بودند
اگر به درد میخوره از این لینک دانلود بفرمایید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Pejvak61
07-12-2014, 20:01
بسيار ممنونم. عالي بود.:n12: