الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكل setInterval

بدأه nassim في 7 نوفمبر 2010 · 10 رد · 922 مشاهدة · في قسم البرمجة بــ Javascript
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سكريبت تحديث بيانات صفحة

استعمل فيها دالة setInterval الدالة تعمل في الفاير فوكس و غيره ماعدى Internet Explorer

يعني الصفحة لا تحدث

هل توجد دالة أخرى من غير setInterval و setTimeout

شكرا

#2

وعليكم السلام ،

setTimeout تعمل على أي متصفح حسب علمي ( و أظن حتى setInterval تعمل على الجميع ) ، المشكلة قد تكون بمكان آخر .

هذا مثال بسيط ، جربته على IE و Chrome وهو يعمل بلا مشاكل .

<html>
<head>
<script type='text/javascript'>
     var i = 0;
    function startCounter()
	{
		setTimeout(inc,1000);
	}

	function inc()
	{
		i++;
		document.getElementById('cid').innerHTML = i;
		setTimeout(inc,1000);
	}
	window.onload = startCounter;
</script>
</head>

<body>
  <p id="cid">0</p>
</body>
</html>

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

مشاكل تحديث بيانات الصفحة :

- لو تريد تحديث الصفحة بناءا على الكوكيز والسيشن فلابد من :

1- اعادة تحميل الصفحة او الذهاب لصفحة اخرى .

2- لو بتستخدم الاجاكس استدعى الصفحة التى بها العمليات على قاعدة البيانات (صفحة العمليات كلها) داخل الصفحة او داخل id لو يتستخدم جى كويرى

انصحك بأن تسهلها على نفسك وماتصعبهاش . بالتوفيق

#4

شكرا لكما على ردكما

اخي الشمري المثال الدي اعطيتني اياه جربته من قبل

لكنه ليس المطلوب

للتوضيح اكثر ساضع المثال كامل

index.php

<html>
<head>
<script language="javascript">
function jah_switch(url,target)
{

    if (document.getElementById(target).innerHTML != '')
    {
        document.getElementById(target).innerHTML = '';
    }
    else
    {

        jah(url,target);
    }

}
function Switch(url,target) {
    // native XMLHttpRequest object

    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = function() {jahDone(target);};
        req.open("GET", url, true);
        req.send(null);
    // IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {jahDone(target);};
            req.open("GET", url, true);
            req.send();
        }
    }
}    

function jahDone(target) {
    // only if req is "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            results = req.responseText;
            document.getElementById(target).innerHTML = results;
        } else {
            document.getElementById(target).innerHTML="خطأ:\n" +
                req.statusText;
        }
    }
}
</script>
</head>
<body>
<?

  require('db_connect.php');
  echo '<div id="photo_show">';
 $get_phos = @mysql_query("SELECT `id`, `title`, `url` FROM `photo` ORDER BY RAND() LIMIT 1");
 $phos = @mysql_fetch_array($get_phos);
    echo '<img width="200" src="'.$phos['url'].'" alt="'.$phos['title'].'" />';

   echo '</div>';

   echo "<script>setInterval('Switch(\'showshow.php\', \'photo_show\');', 10000);</script>";
    ?>
</body>
</html>

و الصفحة التي اقوم بجلبها

showshow.php

<?
require('db_connect.php');
$get_phos = @mysql_query("SELECT `id`, `title`, `url` FROM `photo` ORDER BY RAND() LIMIT 1");
while($phos = @mysql_fetch_array($get_phos))
{
    echo '<img width="200" src="'.$phos['url'].'" alt="'.$phos['title'].'" />';
}  
?>

قاعدة البيانات

CREATE TABLE `photo` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(85) NOT NULL default '',
  `url` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;

السكريبت يعمل في كل المتصفحات بشكل جيد ما عدا متصفح الانترنت ايكسبلور

اين الخطأ او مادا يلزم تغييره او تبديله

ممكن مساعدة

جزاكم الله خيرا

#5

:happy: :unsure:

#6

جرب استبدال

هذه

   echo "<script>setInterval('Switch(\'showshow.php\', \'photo_show\');', 10000);</script>";

بهذه

 echo "<script>setInterval(function(){ Switch('showshow.php', 'photo_show');}, 10000);</script>";
#7

اشكرك على مساعدتك

لكن الفكرة لم تنجح

لا يعمل في الانترنت ايكسبلور :unsure:

#8

السلام عليكم ورحمة الله

بحسب الكود الموجود لم أجد أي مشكلة قد تمنع الدالة setInterval من العمل (و هي عموماً تعمل على جميع المتصفحات)

قد تكون المشكلة في استخدام الـ IE لـ Cached version من المحتوى عند ثاني استدعاء لدالة الـ Ajax

أي أنه لا يقوم بتنفيذ الـ ajax call بشكل فعلي و إنما يقوم بعرض المحتوى من الـ Cache

جرب زيادة مدة الـ setInterval و افراغ الـ Cache الخاصة بالمتصفح اثناء مرور هذا الوقت

إن تغير المحتوى بعد تفريغ الـ Cache فعليك محاولة تعطيل تخزين محتوى هذه الصفحة في الـ Cache

بتوفيق الله...

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 2 ديسمبر 2010 في 02:16

Everything will be fine when we TALK LESS, DO MORE


#9

نعم المشكل في الكاش لا يقزم بمسح الكاش في الانترنت ايكسبلور

لقد اختلطت عليا الامور سبق لي و نبهت في موضوع في منتدى اخر لهده المشكلة

المهم كيف امسح الكاش

لقد جربت حدف الكاش بالطريقة اليدوية و تم تحديث الصفحة و البيانات المدخلة بالاجاكس

يا ريت لو تساعدني

شكرا

#10

جرب اضافة الـ meta tag الخاصة بمنع الحفظ في الـ Cache

كهذه :

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

راجع هذا الرابط : http://www.i18nguy.com/markup/metatags.html

بتوفيق الله...

Everything will be fine when we TALK LESS, DO MORE


#11

شكرا لك

الفكرة تعمل في موقع و لا تعمل في موقع اخر

يعني ان هناك دالة غير مفعلة في استضافة الموقع الدي لم تعمل الفكرة فيه

ما هي هده الدالة يا ترى

يمكن تعرفها

شكرا

مواضيع مشابهة