הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בעיה רצינית עם AJAX וTimeout (https://hosts.co.il/forums/showthread.php?t=47270)

sUP 10-06-07 16:43

בעיה רצינית עם AJAX וTimeout
 
אהלן
אני בונה פה ללקוח עמוד סטטוס שמציג את המצב של האתר שלו
ואמור להתעדכן כל 30 שניות דרך AJAX

אני פשוט מציג span id="xx" ולשם מעדכן את התוכן

הבעיה היחידה - זה לא מעדכן

זה מריץ את זה פעם אחת אבל לא מעדכן

הנה הקוד של העדכון והקריאה:
HTML קוד:

var detailID = 0;


function UpdateDetails() {
  if(detailID) {
      clearTimeout(detailID);
      detailID  = 0;
  }

  ajax("details.php?show=onlinemembers", "onlinemembers");
  ajax("details.php?show=onlinevips", "onlinevips");
  ajax("details.php?show=onlinevips", "onlinevips2");
  ajax("details.php?show=onlineguests", "onlineguests");
  ajax("details.php?show=onlinetotal", "onlinetotal");

  ajax("details.php?show=uniquetoday", "uniquetoday");
  ajax("details.php?show=uniquetotal", "uniquetotal");
  ajax("details.php?show=pagestoday", "pagestoday");
  ajax("details.php?show=pagestotal", "pagestotal");

  ajax("details.php?show=membersregular", "membersregular");
  ajax("details.php?show=membersvip", "membersvip");
  ajax("details.php?show=membersvip", "membersvip2");
  ajax("details.php?show=membersedit", "membersedit");
  ajax("details.php?show=memberstotal", "memberstotal");

  ajax("details.php?show=financetoday", "financetoday");
  ajax("details.php?show=financeyesterday", "financeyesterday");
  ajax("details.php?show=financetotal", "financetotal");

  ajax("details.php?show=arrows", "arrows");

  ajax("details.php?show=last10", "last10");

  detailID = setTimeout("UpdateDetails()", 30000);

}

והנה הקוד של ה AJAX:

HTML קוד:

function GetXmlHttpObject(handler) {
var objXmlHttp=null

        if (navigator.userAgent.indexOf("MSIE")>=0) {
                var strName="Msxml2.XMLHTTP"

                if (navigator.appVersion.indexOf("MSIE 5.5")>=0) {
                        strName="Microsoft.XMLHTTP"
                }

                try {
                        objXmlHttp=new ActiveXObject(strName)
                        objXmlHttp.onreadystatechange=handler
                        return objXmlHttp
                }

                catch(e) {
                        alert("Error. Scripting for ActiveX might be disabled")
                        return
                }
        }


        if (navigator.userAgent.indexOf("Mozilla")>=0) {
                objXmlHttp=new XMLHttpRequest()
                objXmlHttp.onload=handler
                objXmlHttp.onerror=handler
                return objXmlHttp
        }

}


function ajax(url,targ) {

targe = targ;

        xmlHttp = GetXmlHttpObject(stateChanged);
        xmlHttp.open("GET", url , true);
        xmlHttp.send(null);
}

function stateChanged() {
        if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
                document.getElementById(targe).innerHTML=xmlHttp.responseText;
        }
}

תודה מראש |לב|

4ior 10-06-07 17:58

תמחוק את זה:
קוד:

if(detailID) {
      clearTimeout(detailID);
      detailID  = 0;
  }


RS324 10-06-07 17:58

אני מהמר שהבעיה היא בשעון שלך ולא ב AJAX עצמו,
אם הבעיה קוראת רק ב IE שים לב של IE יש בעיה עם ה CHACE והוא לא מרענן את התוכן של בקשת ה XML עד לפעם הבאה שתסגור את הדפדפן ותפתח...

הפתרון... אני אתן לך להיות יצירתי קצת

sUP 10-06-07 18:51

ציטוט:

נכתב במקור על ידי RS324 (פרסם 496895)
אני מהמר שהבעיה היא בשעון שלך ולא ב AJAX עצמו,
אם הבעיה קוראת רק ב IE שים לב של IE יש בעיה עם ה CHACE והוא לא מרענן את התוכן של בקשת ה XML עד לפעם הבאה שתסגור את הדפדפן ותפתח...

הפתרון... אני אתן לך להיות יצירתי קצת

הבעיה קיימת גם בFF

אני לא ממש אשף ב JS לצערי ואין לי זמן ללמוד בשביל זה זה די דחוף
זה הפלזמה של FGC חח אור עצבני |מסמיק|


4ior הורדתי לא עזר

Tomer 10-06-07 19:04

תדליק את ה setTimeout ב onload, ואל תקבע אותו יותר או תבטל אותו... זה אמור לעבוד.

sUP 10-06-07 19:10

ציטוט:

נכתב במקור על ידי Tomer (פרסם 496943)
תדליק את ה setTimeout ב onload, ואל תקבע אותו יותר או תבטל אותו... זה אמור לעבוד.

אבל צריך לקרוא לפונקציה כל 60 שניות מתוך הפונקציה XD

4ior 10-06-07 21:19

אממ, אולי תנסה לשים את
detailID = setTimeout("UpdateDetails()", 30000);

מחוץ לפונקציה..

sUP 10-06-07 21:43

ציטוט:

נכתב במקור על ידי 4ior (פרסם 497110)
אממ, אולי תנסה לשים את
detailID = setTimeout("UpdateDetails()", 30000);

מחוץ לפונקציה..

זה אמור להיות בתוך הפונקציה

The Crow 11-06-07 11:32

בלי שום קשר לבעיה.
עם כמות הבקשות האלו אתה תחנוק את הדפדפן ואת השרת.
ממליץ לך בדחיפות לטפל בזה...

sUP 11-06-07 12:30

ציטוט:

נכתב במקור על ידי The Crow (פרסם 497280)
בלי שום קשר לבעיה.
עם כמות הבקשות האלו אתה תחנוק את הדפדפן ואת השרת.
ממליץ לך בדחיפות לטפל בזה...

איזה עוד אופציות יש לי ?

זה שרת בחול והבנאדם יש לו משרדים בארץ ובחול
והוא רוצה להציג את הסטטיסטיקות האלה במשרדים על פלזמה

אז אני לא יכול פשוט לרפרש את הדף כי הטעינה של העמוד זה איזה כמה שניות
בכל זאת שרת בחול אז אני צריך לעדכן רק תמספרים בלי לעדכן תתמונות וזה

שזה בעייתי רצח אבל זה מה שהוא ביקש |עצוב|


כל הזמנים הם GMT +2. הזמן כעת הוא 09:23.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ