PDA

View Full Version : سوال: Scroll Load



mnakhaeipoor
جمعه 22 شهریور 1392, 15:50 عصر
سلام من یه برنامه دارم که وقتی به سمت پایین اسکرول میخوره باید بقیه مطالب Load بشن (مثل FACEBOOK)
اما مشکل داره و ارور میده
بیزحمت یه نیگاهی بندازین فهمیدین چه مرگشه مارو هم خبر کنید:لبخندساده:

tadayoni
جمعه 22 شهریور 1392, 22:11 عصر
خطایی که میده چیه ؟
شما توی پروگه خودتون اطلاعات رو از پایگاه داده فراخوانی کردید و الان فایل پایگاه داده رو نذاشتید . البته بهترین کار اینه اول خطا رو بگید اگه مشکل حل نشد پایگاه داده رو بفرستید

tadayoni
جمعه 22 شهریور 1392, 22:11 عصر
البته این رو هم بگم که روش کار شما یه مقداری نامناسب هستش
توی کدهایی که نوشتید یه مقدار کار رو پیچیده کردید

mnakhaeipoor
شنبه 23 شهریور 1392, 06:51 صبح
خطایی که میده چیه ؟
شما توی پروگه خودتون اطلاعات رو از پایگاه داده فراخوانی کردید و الان فایل پایگاه داده رو نذاشتید . البته بهترین کار اینه اول خطا رو بگید اگه مشکل حل نشد پایگاه داده رو بفرستید
سلام خسته نباشید:لبخندساده:
ارورش اینه که وقتی اسکرول میخوره مطلبی که قبلا لود شده رو هم دوباره لود میکنه مثلا مطلب شماره 3 رو 3بار لود میکنه!
فایل پایگاه داده رو آپلود کردم:تشویق:
راستی...
تو کل سایت برنامه نویس شما خیلی خوب رفع اشکال میکنید:متفکر: و پیگیرش هستید و من هم به عنوان قدردانی در اسرع وقت با تیم توسعه ی Facebook یه صحبتی میکنم تا از شما برای همکاری دعوت به عمل بیارن:لبخند:

jalil_gh
شنبه 23 شهریور 1392, 08:41 صبح
با توجه به این قسمت از کدهاتون:
//function for send data via ajax
function last_post_func(){
//getting last post ID name
var id=$(".postBox:last").attr("id");
//setting Loading picture
$("#imageLoader").html('<img src="load.gif" alt="Loading..." />');
//now we set Ajax requests for send data
$.get("index.php?action=get&last_post_id="+id,function(data){
//if data was received
if(data != ""){
//add new posts after last post
$(".postBox:last").after(data);
}
$("#imageLoader").empty();
});
}
//setting scrolling configurations
$(window).scroll(function(){
//if we was at the middle of scroll height run new posts
if($(window).scrollTop() == $(document).height() - $(window).height()){
last_post_func();
}
});
اگه درست متوجه شده باشم وقتی که شما اسکرول میکنید تابع last_post_func فراخوانی میشه. این تابع id آخرین پست ارسالی رو میگیره و به سرور ارسال میکنه و سرور هم با توجه به این id مطالب بعدی رو میفرسته.
مشکل اینه که رویداد اسکرول میتونه در ثانیه چندین بار فراخوانی بشه. بار اول که فراخوانی میشه با استفاده از id یه درخواست میفرسته. ولی قبل از اینکه جواب این درخواست برسه یه درخواست دیگه با همون id میفرسته و قبل از اینکه اون دوتا بیان باز هم یه درخواست دیگه میفرسته با همون id و .... و وقتی که پاسخ این درخواست ها میرسه همشون به صفحه شما اضافه میشن.
شما باید کاری کنید که برای یک id مشخص فقط یه بار مطالب درخواست بشه.

mnakhaeipoor
شنبه 23 شهریور 1392, 16:40 عصر
با توجه به این قسمت از کدهاتون:
//function for send data via ajax
function last_post_func(){
//getting last post ID name
var id=$(".postBox:last").attr("id");
//setting Loading picture
$("#imageLoader").html('<img src="load.gif" alt="Loading..." />');
//now we set Ajax requests for send data
$.get("index.php?action=get&last_post_id="+id,function(data){
//if data was received
if(data != ""){
//add new posts after last post
$(".postBox:last").after(data);
}
$("#imageLoader").empty();
});
}
//setting scrolling configurations
$(window).scroll(function(){
//if we was at the middle of scroll height run new posts
if($(window).scrollTop() == $(document).height() - $(window).height()){
last_post_func();
}
});
اگه درست متوجه شده باشم وقتی که شما اسکرول میکنید تابع last_post_func فراخوانی میشه. این تابع id آخرین پست ارسالی رو میگیره و به سرور ارسال میکنه و سرور هم با توجه به این id مطالب بعدی رو میفرسته.
مشکل اینه که رویداد اسکرول میتونه در ثانیه چندین بار فراخوانی بشه. بار اول که فراخوانی میشه با استفاده از id یه درخواست میفرسته. ولی قبل از اینکه جواب این درخواست برسه یه درخواست دیگه با همون id میفرسته و قبل از اینکه اون دوتا بیان باز هم یه درخواست دیگه میفرسته با همون id و .... و وقتی که پاسخ این درخواست ها میرسه همشون به صفحه شما اضافه میشن.
شما باید کاری کنید که برای یک id مشخص فقط یه بار مطالب درخواست بشه.
آره دقیقا مشکلش همینه ولی مهندس شما که انقد زحمت کشیدی خب کاشکی میگفتی چجوری این کاری که گفتی رو انجام بدم:لبخند::لبخند::لبخند:
بیزحمت یکی بگه چجوری:گیج:

jalil_gh
شنبه 23 شهریور 1392, 19:47 عصر
اینو امتحان کن:
var lastSentId = -1;


//function for send data via ajax
function last_post_func(){
//getting last post ID name
var id=$(".postBox:last").attr("id");




if (id == lastSentId) {
return;
}
lastSentId = id;




//setting Loading picture
$("#imageLoader").html('<img src="load.gif" alt="Loading..." />');
//now we set Ajax requests for send data
$.get("index.php?action=get&last_post_id="+id,func tion(data){
//if data was received
if(data != ""){
//add new posts after last post
$(".postBox:last").after(data);
}
$("#imageLoader").empty();
});
}

tadayoni
یک شنبه 24 شهریور 1392, 15:54 عصر
سلام خسته نباشید:لبخندساده:
ارورش اینه که وقتی اسکرول میخوره مطلبی که قبلا لود شده رو هم دوباره لود میکنه مثلا مطلب شماره 3 رو 3بار لود میکنه!
فایل پایگاه داده رو آپلود کردم:تشویق:
راستی...
تو کل سایت برنامه نویس شما خیلی خوب رفع اشکال میکنید:متفکر: و پیگیرش هستید و من هم به عنوان قدردانی در اسرع وقت با تیم توسعه ی Facebook یه صحبتی میکنم تا از شما برای همکاری دعوت به عمل بیارن:لبخند:

شما خیلی لطف دارید ;)
دوست من یه توضیح تکمیلی راجع به این مسئله بدم
من همین کار رو توی سایت http://bazaare.ir انجام داده بودم وبه همین مشکل برخورده بودم
اونجا کد من توی سورس هست و میتونید ببینید و استفاده کنید
این مسئله بخاطر این هستش که وقتی اسکرول به آخر میرسه هر باری که در پایان صفحه باشه ممکنه به تعداد نامعلومی اجرا بشه و این بدلیل این هستش که هرچقدر اون پایین بمونیم تند تند اسکریپت فراخوانی میشه
برای حل این مشکل من یه متغیر تعریف کردم . مقدار اون رو وقتی برای بار اول اسکریپت اجرا میشه صفر گذاشتم تا زمانی که اسکریپت کامل بشه و اطلاعات جدید فراخوانی بشن و بعد مقدارش رو یک کردم
شرط گذاشتم که تا زمانی که مقدار این متغیر صفر باشه اسکریپت اجرای مجدد نشه
به همین راحتی

mnakhaeipoor
شنبه 30 شهریور 1392, 07:45 صبح
اینو امتحان کن:
var lastSentId = -1;


//function for send data via ajax
function last_post_func(){
//getting last post ID name
var id=$(".postBox:last").attr("id");




if (id == lastSentId) {
return;
}
lastSentId = id;




//setting Loading picture
$("#imageLoader").html('<img src="load.gif" alt="Loading..." />');
//now we set Ajax requests for send data
$.get("index.php?action=get&last_post_id="+id,func tion(data){
//if data was received
if(data != ""){
//add new posts after last post
$(".postBox:last").after(data);
}
$("#imageLoader").empty();
});
}
سلام امتحان کردم هیچ فرقی نکرد !
الان من چکار کنم؟

jalil_gh
شنبه 30 شهریور 1392, 09:36 صبح
دوباره کدهاتو با آخرین تغییرات ضمیمه کن.

mnakhaeipoor
شنبه 30 شهریور 1392, 13:36 عصر
دوباره کدهاتو با آخرین تغییرات ضمیمه کن.
خدمت شما:تشویق:

jalil_gh
چهارشنبه 03 مهر 1392, 21:46 عصر
من کدهای شما رو بررسی کردم. الان درخواست فقط یک بار ارسال میشه ولی چون کدهاس سمت سرور شما به دیتابیس نیاز داره و ... نتونستم کامل تست کنم.