Shahab
2 سال پیش توسط Shahab مطرح شد
3 پاسخ

اتو رفرش شدن صفحه در AJAX

اقا سلام. بچه ها من یک چت روم ساختم با php و ajax . بعد یک صفحه داریم با نام Chat room.php و یک صفحه با نام Showmessage.php
توی صفحه Chat room.php المنت های چت روم و استایل و ایناهارو زدم. تو فایل Show.php هم مسیج کاربر رو زدم و با ajax زدم که هر یک ثانیه صفحه ریلود بشه. حالا من برداشتم یک کاری کردم که اگه طرف ادمین بود کنار پیام کاربرا یه سه نقطه باشه که با کلیک بر روی اون یه دارپ داون باز میشه و داخل چندتا گزینه داره. الان به یک باگ سمی خوردم سر همین بحث...!
وقتی ما میزنیم روی اون سه نقطه عه چون صفحه هر یک ثانیه یبار ریلود میشه و دراپ داون هم یک جوریه که با هر ریلود دراپ داون بسته میشه، سر همین به باگ خوردم. انگار شما هنوز دراپ داون رو باز نکردی، دراپ داون بسته میشه. چون صفحه هر یک ثانیه ریلود میشه....
لطفا کمک کنید اگه میدونید. تازه ajax رو شروع کردم خیلی وارد نیستم بهش!


ثبت پرسش جدید
مهدی رفیعی
تخصص : توسعه دهنده نرم افزار
@mahdirafiei 2 سال پیش مطرح شد
1

سلام شهاب جان،

امیدوارم که حالت خوب باشه.

اصلا با گفتن این حرف راحت نیستم ولی متاسفانه باید بگم که این اپلیکیشن/وبسایتی که طراحی کردی از پایه و اساس مشکل داره.
این که صفحه هر ثانیه آپدیت بشه راهی برای دریافت پیام ها به صورت لایو نیست.

از سری مشکلاتی که باهاشون رو به رو میشی:

  • اولین مشکل رو خودت گفتی
  • سر هر بار ریلود اینترنت مصرف میشه و اگه بخواد هر ثانیه این فرایند تکرار بشه حجم مصرفی بیخود بالا میره
  • اگه سرعت اینترنت پایین باشه حتی قبل از این که صفحه چتت لود بشه ریکوئست جدیدی ارسال میشه
  • اگه کاربر بعد از فرستادن چند پیام به هر دلیلی اتصال اینترنتش رو از دست بده، دیگه نمیتونه چت های قبلیش رو ببینه (از اونجایی که صفحه داره ریلود میشه)

راه حل چیه؟

ساده ترین راه (بدترین) : میتونی یه دراپ داون داشته باشی که کنار خود پیام باز نشه. یه دراپ داونی که یه جورایی گلوبال هست و با کلیک روی سه نقطه پیام، دراپ داون آیدی پیام رو دریافت میکنه و به طور مستقل عمل میکنه. (تحت تاثیر رفرش صفحه چت قرار نمیگیره)

راه بهتر (افزایش کیفیت اپلیکیشن) : تموم پیام هارو توی یه لیست‌‌ (array) ذخیره کن و هر بار پیام های جدید رو fetch کن و لیست رو به روزرسانی کن. اینطوری با اومدن پیام جدید، پیام فقط روی صفحه به نمایش در میاد و مزاحم دراپ داون نمیشه. اما حتی با انجام این کار بازم مشکل اصلی که همون استفاده بیهوده از اینترنت هست حل نمیشه. پس باید چیکار کرد؟

بهترین راه حل: استفاده از socket.io یا firebase cloud messaging هستش. البته socket یه پکیج نود هست و نمیتونی ازش استفاده کنی ولی خواستم کاربردش رو بهت توضح بدم. با کمک همچین پکیجی میتونی سمت سرور یه سری کانال هایی رو ایجاد کنی و کاربران رو بهشون وصل کنی (گروه یا چت دو نفره). و اونطوری تنها وقتی پیام جدیدی بیاد اطلاعات به بقیه اعضایی که به چت دسترسی دارن ارسال میشه و بدین صورت تنها در موقع نیاز اطلاعات در و بدل میشه. دنبال پکیجی شبیه به این باش و یا از firebase cloud messaging استفاده کن.

امیدوارم که تونسته باشم بهت کمک کنم😊
اگه مشکلت حل شده میتونی گزارشت رو ببندی و مشکلات جدید رو داخل یه بحث جدید مطرح کنی 😇


Shahab
تخصص : برنامه نویس وب
@Shahab.prgm 2 سال پیش مطرح شد
0

@mahdirafiei
داش دمت گرمممم


مهدی رفیعی
تخصص : توسعه دهنده نرم افزار
@mahdirafiei 2 سال پیش مطرح شد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام