رفتن به مطلب

پست های پیشنهاد شده

اون سایت رفرش می شه

من نگفتم با جی کوئری نیست

با آژاکس جی کوئریه

در مورد آژاکس مطالعه کنید و لینکی که دادم را چک کنید

به این تصویر هم دقت کنید می بینید که داره رفرش انجام می شه روی بروسر خودتون امتحان کنید

post-336-0-33801900-1407654961_thumb.png

لینک به ارسال

اون سایت رفرش می شه

من نگفتم با جی کوئری نیست

با آژاکس جی کوئریه

در مورد آژاکس مطالعه کنید و لینکی که دادم را چک کنید

به این تصویر هم دقت کنید می بینید که داره رفرش انجام می شه روی بروسر خودتون امتحان کنید

post-336-0-33801900-1407654961_thumb.png

ممنون

غیر از لینکی که دادید ، منبع دیگه ای برای این کار سراغ دارید ؟

لینک به ارسال

لینکی که دادم ژنراتوریه که خودم نوشتم و می دونم چی کار کردم

http://www.w3schools.com/ajax/default.asp

لینک به ارسال

لینکی که دادم ژنراتوریه که خودم نوشتم و می دونم چی کار کردم

http://www.w3schools...jax/default.asp

ممنون.

باهاش کار میکنم ، مشکلی بود همینجا مطرح میکنم.

لینک به ارسال

این آموزش رو هم در سایت داشتم ولی یادم نبود

چیز زیادی ازش نفهمیدم ، بازم ممنون

لینک به ارسال

اون سایت رفرش می شه

آقا ایمان به سایت خوب دقت کردم.

خود مدیر این کد رو گذاشته :


$(document).load(function () {
window.setInterval("refresh();", 300000);
});

بعد یه مدت سایت رفرش میشه.

اما قسمتی که خبرهای جدید اضاف میشه ، رفرش نمیشه.

از صفحه inspect element بگیرید و بیاید روی تگ <div class="b">.

کاملا نحوه کار سایت مشخصه.

خبرجدید که اضاف میشه ، background-color نداره و با jquery اضاف میشه.

اگر div رفرش میشد ، باید background-color خبرهای قدیمی تر از بین میرفت.

ویرایش شده توسط Ghasem Paran
لینک به ارسال

خوب من هم که همین رو عرض کردم

بعد باید با تابع setTimeout صفحه را در یک بازه زمانی مشخص مثلا 1 دقیقه رفرش کنید و در نهایت دستور رفرش را آژاکسی کنید و بهش افکت بدید

موضوع اینه که خبر جدید در اثر رفرش آژاکسی به سایت معرفی می شه و راه دیگه ای هم وجود نداره php سمت سروره و از طرف کاربر قابل تغییر نیست و ارتباط با دیتابیس هم توسط php انجام می شه پس باید برای واکشی اطلاعات جدید از سرور صفحه دوباره بارگذاری بشه

حالا می شه این بارگذاری را با آژاکس انجام داد و با جی کوئری بهش افکت داد

لینک به ارسال

موضوع اینه که خبر جدید در اثر رفرش آژاکسی به سایت معرفی می شه و راه دیگه ای هم وجود نداره php سمت سروره و از طرف کاربر قابل تغییر نیست و ارتباط با دیتابیس هم توسط php انجام می شه پس باید برای واکشی اطلاعات جدید از سرور صفحه دوباره بارگذاری بشه

حالا می شه این بارگذاری را با آژاکس انجام داد و با جی کوئری بهش افکت داد

خب من تا به حال همچین کاری انجام ندادم ، آشنایی زیادی هم ندارم. برای همین سوال زیاد میپرسم :D

به همچین اسکریپتی برای سایتم خیلی لازم دارم و مهم است.

لینک به ارسال
  • 2 هفته بعد...

سلام مجدد

من از تابع load جی کوئری برای نمایش اخبار به صورت زنده استفاده کردم.

20 تا خبر آخر رو نشون میده.

حالا یه مشکل داره ، اگر 30 تا خبرجدید اضافه شده باشه :

اول این که 10 تاش نشون داده نمیشه.

دوم این که همه خبرها به یه دفعه عوض میشن.

چیکار کنم ، خبرها به صورت تک تک اضافه شوند ؟

ویرایش شده توسط Ghasem Paran
لینک به ارسال

یا من درست متوجه نشدم یا فکر کنم یه جای کار رو اشتباه رفته باشید

اگر نشانی آنلاین دارید بگذارید

لینک به ارسال

یا من درست متوجه نشدم یا فکر کنم یه جای کار رو اشتباه رفته باشید

اگر نشانی آنلاین دارید بگذارید

متاسفانه هنوز قالب روی لوکال هست.

اچ تی ام ال :


<ul class="news">
</ul>

جی کوئری :


auto_load = setInterval(function(){
$(".news").load("live.php");
},60000);

فایل php :


$sql = "SELECT * FROM `posts` ORDER BY id desc limit 20";
$query = $this->load->connect->prepare($sql);
$query->execute();
while($row = $query->fetch(PDO::FETCH_ASSOC)) {
echo '<li>
<figure>
<img src="" width="70" height="70" alt="" title="">
</figure>
<a target="_blank" href="" title=""></a>
<div class="info">
<span class="right"><a target="_self" href=""></a></span>
<time datetime="" class="left"></time>
</div>
</li>';
}

این کد 20 تا خبر اخر رو زنده نشون میده.

1 - اگر 30 تا خبر جدید به یکباره اضاف بشه ، که 100% تا الان چندین بار اتفاق افتاده ، بر اساس کوئری فقط 20 تاش نشون داده میشه. (10 تای دیگه چی میشه ؟) :wacko:

2 - فرض کنید 5 تا خبر جدید اضاف شده ، بعد از این که تابع load فراخوانی شد ، هر 5 تا خبر میاد روی صفحه ، من میخوام تک تک بیاد ، مثل سایتی که داخل تاپیک های پیشین معرفی کردم.

ویرایش شده توسط Ghasem Paran
لینک به ارسال

اینکه 20 تا خبر رو کوئری می خونه مربوط می شه کوئریتون که تعدادش رو از main_query می گیره که تعداد مطالب صفحه اصلی سایتتونه

و اصلا لازم نبود کوئری بگیرید و آژاکسیش کنید شما می تونستید خود صفحه اصلی سایت را روی خودش آژاکسی رفرش کنید

البته ساختارتون باید اینجوری می شد


<div class="news">
<ul id="newsInner">
...

و


...
$(".news").load("<?php bloginfo('url');?>/#newsInner");
...

وجود آی دی newsInner باعث می شه جی کوئری بدونه کدوم بخش از صفحه را در داخل کلاس news لود کنه

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

لینک به ارسال

برای این که فشار به سرور نیاد ، من یک صفحه اختصاصی برای اخبار زنده ساختم ، وگرنه خودم دوست داشتم تمام اخبار روی صفحه اول آژاکسی باشه :D

الان این روشی که شما گفتید ، از کجا میفهمه که کدوم مطالب رو باید لود کنه ؟

چون داخل این قسمت هیچ کوئری از قبل ارسال نمیشه و خبری برای نمایش وجود نداره تا این کد جی کوئری که ارسال کردم اجرا بشه.

آقا ایمان من یک پیشنمایش برای شما میذارم و براتون pv میکنم آدرسشش.

هر وقت تونستید نظرتون داخل pv بگید.

ممنون

لینک به ارسال

ببینید وقتی شما می خواهید در دایو با کلاس یا آی دی 1 آی دی 2 را اود کنید باید کل کدهای کوئری یا حلقه تون داخل دایو 2 موجود باشند چون آژاکس اون بخش را دوباره فراخوانی می کنه

شما اول باید آژاکس را کنار بگذارید به صورت عادی و معمولی چیزی که می خواهید را بسازید وقتی از اجرای صحیحش مطمئن شدید اونرو آژاکسی کنید

لینک به ارسال

من با یه برنامه نویس صحبت کردم ، یه راه حل داد.

گفت میشه که با آژاکس به دیتابس وصل شد و مطالب جدید فراخوانی کرد و در یک متغییر ذخیره کرد.

بعدش گفت میشه خبرها رو تک تک به صفحه append کرد.

لازم هم نیست همه خبرها سریع اضافه شوند ، دفعه بعد که به دیتابس وصل شد و خبرها واکشی شد ، بعد از آخرین خبر متغییر قرار بگیره.

میشه همچین کاری کرد ؟ اگر میشه راهنمایی کنید.

ویرایش شده توسط Ghasem Paran
لینک به ارسال

بله می شه و فکر کنم روش کاریه اغلب سایتهای مشابه همینجوریه

کار خاصی نداره با توجه به اینکه عملا قرار نیست صفحه تغییر کنی می شه نتیجه گرفته شده از دیتابیس را به با مقدار فعلی یک متغیر مثل contents مقایسه کرد و موارد جدید را به متغیر داد در نتیجه مقدار متغیر مثلا از a

b

c

d

می شه

a

b

c

d

e

و از طرف دیگه لیستتون با با settimeOut در سر موعد خودش یکی از انتها کم می کنه و مثلا a را جایگزینش می کنه و از موجودی متغیر حذفش می کنه

من پیشنهادم را قبلا هم خدمتتون عرض کردم بجای اینکه چند کد را به دست آورید در مورد آژاکس از ریشه مطالعه کنید این خیلی مهمه که ابزارتون و کارکردهاش رو بشناسید

لینک به ارسال

آقا ایمان من از خدامه که آژاکس از پایه شروع کنم ، اما نمیشه ، درس و دانشگاه وقت زیادی برام نمیذاره ، برای همین دنبال چیزهایی که مورد نیازم هست میرم.

فعلا آژاکس خالص با جاوا اسکریپت و جی کوئری هم تابع های fade , animate , slide و (چیزهایی که برای effect هست) ... رسیدم کار کنم.

در مورد این موضوع هم این جوری بهتره ، هم فشار به سرور کم تر میاد ، هم زیباتر میشه کار رو انجام داد.

من یه جستجو کردم داخل سایت های مختلف. به این کد رسیدم. کمی تغییرش دادم.


var status = "play";
var post='';
var auto_load = setInterval(function(){
if(status == "play") {
$.ajax({
type:'post',
url: '/live',
dataType:'text',
success: function(data) {
useReturnData(data);
}
});
}
},5000);
function useReturnData(data){
post = data.split('\n\n');
};

الان خبرها خونده میشن و داخل post ریخته میشه. (اطلاعاتی که خونده میشه 20 تا li هست)

1 - یه مشکلی که داره این که هر دفعه اجرا میشه ، کل مقدار post تغییر میکنه.

2 - بعد من نمیدونم چطوری مقدار post رو تک تک بخونم.

3 - هر خبری که به صفحه اضافه میشه ، باید از post حذف بشه

ویرایش شده توسط Ghasem Paran
لینک به ارسال

یالاخره بعد یک شب نخوابیدن درستش کردم. :D

ارزششو داشت ، چون چیزی که میخواستم شد. :)

داده ها از دیتابیس به json تبدیل میشن و توسط آژاکس خوانده شده و تک تک خوانده و به صفحه اضاف میشه.

یه مشکل کوچیک داره.

من تاریخ ها رو داخل دیتابیس ذخیره کردم ، یه فانکش دارم که اختلاف زمان رو بدست میاره (درست کار میکنه و تست شده)

خبرها که اضاف میشن ، مثلا اولی مینویسه 6 ثانیه پیش ، بعدی 4 ثانیه پیش و بعدی 2 ثانیه پیش و ...


<ul>
<li>6 ثانیه پیش</li>
<li>4 ثانیه پیش</li>
<li>2 ثانیه پیش</li>
</ul>

اینجوری باید باشه » اولی 2 ثانیه پیش ، دومی 4 ثانیه پیش ، سومی 6 ثانیه پیش ...


<ul>
<li>2 ثانیه پیش</li>
<li>4 ثانیه پیش</li>
<li>6 ثانیه پیش</li>
</ul>

یعنی برعکس نشون میده :D امیدوارم منظورم رو رسونده باشم.

راهی هست درستش کنم ؟

ویرایش شده توسط Ghasem Paran
لینک به ارسال

یالاخره بعد یک شب نخوابیدن درستش کردم. :D

ارزششو داشت ، چون چیزی که میخواستم شد. :)

داده ها از دیتابیس به json تبدیل میشن و توسط آژاکس خوانده شده و تک تک خوانده و به صفحه اضاف میشه.

یه مشکل کوچیک داره.

من تاریخ ها رو داخل دیتابیس ذخیره کردم ، یه فانکش دارم که اختلاف زمان رو بدست میاره (درست کار میکنه و تست شده)

خبرها که اضاف میشن ، مثلا اولی مینویسه 6 ثانیه پیش ، بعدی 4 ثانیه پیش و بعدی 2 ثانیه پیش و ...


<ul>
<li>6 ثانیه پیش</li>
<li>4 ثانیه پیش</li>
<li>2 ثانیه پیش</li>
</ul>

اینجوری باید باشه » اولی 2 ثانیه پیش ، دومی 4 ثانیه پیش ، سومی 6 ثانیه پیش ...


<ul>
<li>2 ثانیه پیش</li>
<li>4 ثانیه پیش</li>
<li>6 ثانیه پیش</li>
</ul>

یعنی برعکس نشون میده :D امیدوارم منظورم رو رسونده باشم.

راهی هست درستش کنم ؟

توی کوئری که از دیتابیس می‌گیرید order_by رو تغییر بدید.

ویرایش شده توسط Anisi
لینک به ارسال

توی کوئری که از دیتابیس می‌گیرید order_by رو تغییر بدید.

دوست عزیز ، عرض کردم ، درست نمایش داده میشه اما برعکس.

صعودی یا نزولی بودنش تاثیری نداره.

تاریخ داخل دیتابیس به این شکل هست :

2014-08-27 05:29:38.000000

خبرها که به دیتابیس اضاف میشه ، اختلاف زمانی خیلی کمی دارند (1 ثانیه و 2 ثانیه)

تابعی که گفتم ، زمان ثبت خبر رو نسبت به زمان فعلی محاسبه میکنه و چون خبرها به ترتیب نمایش داده میشه تا برسه به آخرین خبر ، بنابراین زمانش زیاد میشه.

من میخوام اگه میشه برای این قسمت با جی کوئری تاریخ رو نمایش بدم و کاری به تابعی که دارم نداشته باشم.

فکر کنم بد توضیح دادم :D:unsure:

ویرایش شده توسط Ghasem Paran
لینک به ارسال
  • 2 هفته بعد...

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...