PDA

View Full Version : Why do i keep getting errors



skatermike21988
12-28-2006, 10:14 AM
ok i have a code that pulls data out from a xml file, once pulled i have the javascript parse it to the page, that all works, now i need it to have add a link to refer to another javascript function.

The problem is this.

My code works fine like this:


<script type="text/javascript">
function changemusic(id) {

xmlDoc=loadXMLDoc('changemusic.php?id='+id);
var playlist_div=document.getElementById("playlist");
playlist_div.innerHTML='';


var x=xmlDoc.getElementsByTagName('artist');
var k=xmlDoc.getElementsByTagName('title');
var j=xmlDoc.getElementsByTagName('java');
for (i=0;i<x.length;i++)
{
var artist=(x[i].childNodes[0].nodeValue)
var title=(k[i].childNodes[0].nodeValue)
var java=(j[i].childNodes[0].nodeValue)


document.getElementById("playlist").innerHTML +=artist+' - '+title+'<input type=button value=play><br>';
}

}
</script>


Butonce i add the onclick command to the button i recieve errors


<script type="text/javascript">
function changemusic(id) {

xmlDoc=loadXMLDoc('changemusic.php?id='+id);
var playlist_div=document.getElementById("playlist");
playlist_div.innerHTML='';


var x=xmlDoc.getElementsByTagName('artist');
var k=xmlDoc.getElementsByTagName('title');
var j=xmlDoc.getElementsByTagName('java');
for (i=0;i<x.length;i++)
{
var artist=(x[i].childNodes[0].nodeValue)
var title=(k[i].childNodes[0].nodeValue)
var java=(j[i].childNodes[0].nodeValue)


document.getElementById("playlist").innerHTML +=artist+' - '+title+'<input type=button value onclick='+java+'><br>';
}

}
</script>


Any ideas why?

All help appreciated.

Mike

jscheuer1
12-29-2006, 06:18 AM
var java=(j[i].childNodes[0].nodeValue)

and:


document.getElementById("playlist").innerHTML +=artist+' - '+title+'<input type=button value onclick='+java+'><br>';

appears to assign as an onclick event a node value which could only be (as far as I can see) either null or a simple string. An onclick event needs to be a function.

skatermike21988
12-29-2006, 05:07 PM
there is another function, for it to play the song, that function works, the


var java=(j[i].childNodes[0].nodeValue)

Outputs a value that php parses to xml and the javascript pulls out the data, i tried alerting that walue and it is outputing the correct values.

jscheuer1
12-29-2006, 06:58 PM
there is another function, for it to play the song, that function works, the


var java=(j[i].childNodes[0].nodeValue)

Outputs a value that php parses to xml and the javascript pulls out the data, i tried alerting that walue and it is outputing the correct values.

Still not convinced. What is a typical value for the variable java? I notice that you are not quoting as would be required in valid HTML and innerHTML. For some values, that would work, for a function, it will not.

skatermike21988
12-30-2006, 03:50 AM
Still not convinced. What is a typical value for the variable java? I notice that you are not quoting as would be required in valid HTML and innerHTML. For some values, that would work, for a function, it will not.

The value of java is pulled from a xml document parsed by php, the xml contains the function with the value that needs to be contained in the function. the actual value that goes in the onclick is like this:


onclick=song('the source of the song','Artist And Title')


i have also tried quoting it like this:


onclick="song('the source of the song','Artist And Title')"

That hasn't worked either.

jscheuer1
12-30-2006, 05:47 AM
That's not a typical example, it is a general example. A typical example would be a bit of actual code that becomes a part of the document. Even your general example raises another question though. What's song()? Is it defined in time for the user to click on the button and use it? Are the parameters passed to it in the proper form (variables or strings as the case may be - your example makes them look like strings) and are they available to it at the time of the event? Is song() itself valid?

A link to your page may help.

skatermike21988
12-30-2006, 06:45 AM
That's not a typical example, it is a general example. A typical example would be a bit of actual code that becomes a part of the document. Even your general example raises another question though. What's song()? Is it defined in time for the user to click on the button and use it? Are the parameters passed to it in the proper form (variables or strings as the case may be - your example makes them look like strings) and are they available to it at the time of the event? Is song() itself valid?

A link to your page may help.

ok song is another function that i am not having a problem with.

here is a link to my page

http://www.music.friendshideout.com/desktopplayer.php

you will need to register in order to view, the register page will open in a seperate window, once registered you can exit and login, you will see my picture as i am an instant friend, click on it and a list of songs will be displayed, when i click play is when i recieve the errors.


it comes up with errors only when i add onclick="somefunction();"

i have even tried making up a basic function to display data in a div and i still recieve errors. Here is the whole code

desktopplayer.php:





<html>
<head>




<script type="text/javascript" src="loadxmldoc.js">
<script type="text/javascript">

function song(what,who){
document.getElementById("music1").innerHTML='<object id="mediaplayer1" width="200" height="45" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject"><param name="URL" value="'+what+'"><param name="AutoStart" VALUE="True"><param name="uiMode" value="full"><embed type="application/x-mplayer2" src="'+what+'" ShowControls="1" AutoStart="1" width="200" height="45"></embed></object>';
nowplaying(who);
return false;
}

function nowplaying(who)
{
document.getElementById("playing").innerHTML='<font color="blue"><h4>Now Playing '+who;


}



function changemusic(id) {

xmlDoc=loadXMLDoc('changemusic.php?id='+id);
var playlist_div=document.getElementById("playlist");
playlist_div.innerHTML='';


var x=xmlDoc.getElementsByTagName('artist');
var k=xmlDoc.getElementsByTagName('title');
var j=xmlDoc.getElementsByTagName('java');
var playlist = document.getElementById("playlist");
for (i=0;i<x.length;i++)
{
var artist=(x[i].childNodes[0].nodeValue);
var title=(k[i].childNodes[0].nodeValue) ;
var java=(j[i].childNodes[0].nodeValue);





document.getElementById("playlist").innerHTML +=artist+' - '+title+'<input type="button" value="Play" onclick="'+java'+"><br>';

}

}
</script>












</head>
<body>
<?




echo"<center>Welcome $displayname";





echo"<table><tr><td width='500' colspan=2><br><div id='playing'></div>";

echo"
<div id='playing'></div>
<div id='music1'>
<object width='200' height='45'
classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6'
type='application/x-oleobject'>
<param name='URL' value=''>
<param name='AutoStart' VALUE='True'>
<param name='uiMode' value='full'>
<embed type='application/x-mplayer2'
src=''
ShowControls='1'
width='200'
height='45'>
</embed>
</object>
</div>";

echo"<div id='playlist'></div></td></tr>";

//User has no blogs

echo"</table>";



echo"<table><tr><td colspan=10>Listen To Friends Music</td></tr>";








$data1 = mysql_query("SELECT * FROM friends WHERE user_id='$id' LIMIT 10")
or die(mysql_error());
while($info1 = mysql_fetch_array( $data1 )) {


$friendid=$info1['friend_id'];

$data = mysql_query("SELECT * FROM users WHERE user_id='$friendid'")
or die(mysql_error());
while($info = mysql_fetch_array( $data )) {


$display=$info['display_name'];
$photo=$info['default_photo'];
$online=$info['online'];




?><td valign=top><center><a href='#' style="text-decoration:none;" onclick="changemusic('<? echo"$friendid";?>');">
<?
echo "<font color='blue'>$display<br>";

Print "<img src='$photo' height='75' width='75' border='0'></a>";
//display if user is online
if ($online=='0') {
echo"</font></td>";
}
else
{
echo "<br><img src='http://www.friendshideout.com/images/online.gif'></font></td>";
}
}

}


here is loadxmldoc.js


function loadXMLDoc(dname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}


and changemusic.php:

(this is where the value for java comes from)


$xml = '<?xml version="1.0" ?><root>';
$data2 = mysql_query("SELECT * FROM music WHERE user_id='$userid' ORDER BY artist ASC")
or die(mysql_error());
while($info2 = mysql_fetch_array( $data2 )) {




//Pull data from database about that user

$songid="".$info2['song_id'] . "";
$source="".$info2['source'] . "";
$artist="".$info2['artist'] . "";
$title="".$info2['title'] . "";



//Display 5 most recent blogs

$xml .= '<song id="' . $songid . '">';
$xml .= "<artist>" . $artist . "</artist>";
$xml .= "<java>song('" . $source . "','" . $artist . " - " . $title . "')</java>";
$xml .= '<title>' . $title . '</title>';
$xml .= '<source>' . $source . '</source>';
$xml .= '</song>';


}
$xml .= '</root>';
echo $xml;


That is all code related to that page. Hope this helps

jscheuer1
12-30-2006, 07:44 AM
Why do I have to reset my clock to log on?

skatermike21988
12-30-2006, 08:01 AM
don't worry about that it is just something i was working on, but stopped, just login via this link:

http://www.music.friendshideout.com/desktopplayer.php

jscheuer1
12-30-2006, 08:40 AM
Well, here is a bit of the source code of the page:


<script type="text/javascript" src="loadxmldoc.js">
<script type="text/javascript">
function nowplaying(who)
{
document.getElementById("playing").innerHTML='<font color="blue"><h4>Now Playing '+who;


}

function song(what,who){
document.getElementById("music1").innerHTML='<object id="mediaplayer1" width="200" height="45" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject"><param name="URL" value="'+what+'"><param name="AutoStart" VALUE="True"><param name="uiMode" value="full"><embed type="application/x-mplayer2" src="'+what+'" ShowControls="1" AutoStart="1" width="200" height="45"></embed></object>';
nowplaying(who);
return false;
}





</script>

As you can see, you have nested opening script tags. You must close one script tag before opening another. As a result, song() is undefined. There may be other problems but, you need to close that first tag before opening the next:


<script type="text/javascript" src="loadxmldoc.js"></script>
<script type="text/javascript">
function nowplaying(who)
{
document.getElementById("playing").innerHTML='<font color="blue"><h4>Now Playing '+who; . . .


That's the error you are getting 'object expected'. A function is an object.

skatermike21988
12-30-2006, 08:57 AM
Well, here is a bit of the source code of the page:


<script type="text/javascript" src="loadxmldoc.js">
<script type="text/javascript">
function nowplaying(who)
{
document.getElementById("playing").innerHTML='<font color="blue"><h4>Now Playing '+who;


}

function song(what,who){
document.getElementById("music1").innerHTML='<object id="mediaplayer1" width="200" height="45" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject"><param name="URL" value="'+what+'"><param name="AutoStart" VALUE="True"><param name="uiMode" value="full"><embed type="application/x-mplayer2" src="'+what+'" ShowControls="1" AutoStart="1" width="200" height="45"></embed></object>';
nowplaying(who);
return false;
}





</script>

As you can see, you have nested opening script tags. You must close one script tag before opening another. As a result, song() is undefined. There may be other problems but, you need to close that first tag before opening the next:


<script type="text/javascript" src="loadxmldoc.js"></script>
<script type="text/javascript">
function nowplaying(who)
{
document.getElementById("playing").innerHTML='<font color="blue"><h4>Now Playing '+who; . . .


That's the error you are getting 'object expected'. A function is an object.

OMG!!!!!! THANK YOU SO MUCH THAT WAS IT!!!!!! Everything works now. Thanks A Lot!!!