לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 01-07-2007, 10:51
  משתמש זכר דָן דָן אינו מחובר  
 
חבר מתאריך: 29.03.07
הודעות: 316
שלח הודעה דרך MSN אל דָן
בעיה עם משתנה מחלקה בJS

קוד:
<html> <head> <script type="text/javascript"> var media = function() { this.currentSong = 0; try { XMLhttp = new XMLHttpRequest(); } catch(e) { try { XMLhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { XMLhttp = ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { return false; } } } XMLhttp.overrideMimeType('text/xml'); XMLhttp.onreadystatechange = function(){ if(XMLhttp.readyState==4) if (XMLhttp.status == 200) this.songsList = XMLhttp.responseXML.getElementsByTagName('song'); } XMLhttp.open('GET', 'mediaLIST.xml', true); XMLhttp.send(null); this.outputCurrentSong = function(selectBox_ID){ document.getElementById(selectBox_ID).innerHTML = this.songsList[this.currentSong].getAttribute('name'); } this.prev = function(){ this.currentSong --; if(this.currentSong < 0) this.currentSong = this.songsList.length; } this.next = function(){ this.currentSong ++; if(this.currentSong > this.songsList.length) this.currentSong = 0; } } var mediaObj = new media(); window.onload = mediaObj.outputCurrentSong('mediaSELECTION'); </script> </head> <body> <div id='mediaSELECTION'></div> </body> </html>


השליפת נתונים בAJAX פועלת מעולה, ולבסוף אני מקבל את הנתונים, אך הנתונים אינם נשמרים ל this.songsList.

כמו שכבר נוכחתי לדעת, זה בגלל שה this. בפונקציה הזאת מתייחס ל XMLhttp, לכן המשתנה לא עובר לשאר המחלקה (אם אני אהפוך את XMLhttp למשתנה מחלקה, אולי המשתנה songsList יהיה משתנה מחלקה גם כן?).

בקצרה - איך אני יכול להפוך את המשתנה songsList למשתנה מחלקה?

בנוסף, גם כאשר אני מגדיר את XMLhttp בתור משתנה מחלקה, הנתונים משום מה לא עוברים (this.XMLhttp has no properties)
ולכן עכשיו המשתנה אינו משתנה מחלקה, אשמח לפתרון גם לכך (כמו שכבר הסברתי, יכול להיות בכך אני אפתור את שתי הבעיות?)


תודה מראש.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 01-07-2007, 12:29
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 1 שנכתבה על ידי דָן שמתחילה ב "בעיה עם משתנה מחלקה בJS"

זה טיפה מבולגן אצלך ...נסה לסדר את הקוד.

אני מניח שבקטע הקוד הבא:
קוד:
XMLhttp.onreadystatechange = function(){ if(XMLhttp.readyState==4) if (XMLhttp.status == 200) this.songsList = XMLhttp.responseXML.getElementsByTagName('song'); }


יש את הבעיה שלמשתנה songsList לא מועבר המידע, ואתה צודק, באמת לא יכול להיות מועבר לו המידע.
וזה מהסיבה שהוא נמצא בתוך פונקציה שנקבע למאפיין של המשתנה XMLhttp, ולכן כשאתה כותב בתוך הפונקציה התייחסות ל-this, אז אתה מתייחס לXMLhttp כהמחלקה, ולא למחלקה הראשית.
פיתרון אחד שאתה יכול לעשות זה לקבוע משתנה obj למשל שהוא יהיה שווה ל-this מחוץ למחלקה, ולקבוע אותו כמשתנה גלובאלי.
לדוגמא:

קוד:
... /* code... */ var obj = this; XMLhttp.onreadystatechange = function(){ if(XMLhttp.readyState==4) if (XMLhttp.status == 200) obj.songsList = XMLhttp.responseXML.getElementsByTagName('song'); } ... /* code... */


דבר שני שאפשר לעשות זה לקבוע את XMLhttp כמשתנה מחלקה ואז אני חושב שאם תכתוב this.songsList זה יתיחס אליו כמשתנה למחלקה הראשית...לדוגמא:

קוד:
... /* code... */ var obj = this; this.XMLhttp.onreadystatechange = function(){ if(this.XMLhttp.readyState==4) if (this.XMLhttp.status == 200) this.songsList = this.XMLhttp.responseXML.getElementsByTagName('son g'); } ... /* code... */


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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 16:02

הדף נוצר ב 0.05 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר