01-07-2007, 11:51
|
|
|
חבר מתאריך: 29.03.07
הודעות: 316
|
|
בעיה עם משתנה מחלקה ב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)
ולכן עכשיו המשתנה אינו משתנה מחלקה, אשמח לפתרון גם לכך (כמו שכבר הסברתי, יכול להיות בכך אני אפתור את שתי הבעיות?)
תודה מראש.
|