اذهب إلى المحتوى
  • 0

كيف أحدّث جزء معين من الصفحة باستعمال ajax/json؟

سعاد

السؤال

لدي موقع سبق وأن عملت عليه منذ فترة، ويتوفر الموقع على خاصية المحادثة الفورية، وأريد إظهار المستخدمين المتصلين حاليا، لكن يحدث خطأ مع دالة append، حيث تُضاف البيانات إلى الصفحة عدة مرات، وهذا كود php الخاص بالصفحة:

<?php
public function online(){
    $database = new DB();
    $db = $database->database();
    $array = array();
    $ref = $_SESSION['oc_users_ref'];

    $time_out = time()-5;
    $time = time();

    $query = $db->query("SELECT * FROM oc_users WHERE users_online = 0");

    $updateOnline = $db->query("UPDATE oc_users SET users_online = 1 WHERE users_lastcome < '$time_out'");

    $q = $db->query("SELECT * FROM oc_users WHERE users_ref <> '$ref' AND users_online = 0 ORDER BY users_lastcome DESC");

     while($data = $q->fetch()) {
        if($data['users_online'] == 1){
            $class = "opacity30";
        }else{
            $class = '';
        }
        $array[] = $data;
     }
     print json_encode($array);
} ?>

كود Javascript:

function getOnline(){
	$.ajax({
		url: "conf/users.php?act=online",
		dataType: "text",
		success: function(data) {
			var json = $.parseJSON(data);
			for (var i=0;i<json.length;++i)
			{
				$('#printOnline').append('<li><a href="javascript:void(0);" onclick=javascript:chatWith("'+json[i].users_nickname+'")><i></i>'+json[i].users_nickname+'</a></li>');
			}
		}
	});
}
setInterval('getOnline()',10000);

أين يكمُن المشكل؟ وكيف أستطيع حلّه؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

من الطبيعي حدوث ذلك، لأنك لم تعمل reset لقائمة المتصلين حالياً قبل الإقدام على التحديث، ونفعل ذلك بهذه الطريقة:

function getOnline(){
    $.ajax({
        url: "conf/users.php?act=online",
        dataType: "text",
        success: function(data) {
            $('#printOnline').html("");
            var json = $.parseJSON(data);
            for (var i=0;i<json.length;++i)
            {
                $('#printOnline').append('<li><a href="javascript:void(0);" onclick=javascript:chatWith("'+json[i].users_nickname+'")><i></i>'+json[i].users_nickname+'</a></li>');
            }
        }
    });
}
setInterval('getOnline()',10000);

     شرح ما حدث: ينبغي دائما في القوائم والبيانات التي تُحدّث بشكل تلقائي أن نمسح البيانات السابقة قبل عملية التحديث وذلك حتى لا تتراكم البيانات الجديدة والقديمة، لتظهر الجديدة فقط، فلا يعقل أن نرى مستخدم مكرر مرتين أو أكثر لأنه مع مرور الوقت سيظهر جميع المتصلين بشكل متكرر، وهذا ما لا نريده طبعا، إذن وجب مسح القائمة ثم إعادة توليدها عبر عملية التحديث.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...