Sinds enige tijd heb een vrij uitgebreid script ontwikkeld waar iedereen zijn of haar filmcollectie kan bijhouden (op basis van IMDb informatie). De huidige versie is hier te zien: http://www.tomrunia.nl/
Door op een rij te klikken krijg je uitgebreide informatie over de film. Zoals het op de bovenstaande link wordt uitgevoerd is best wel een ranzige oplossing eigenlijk. Bij het laden van de pagina wordt alle data geladen en als html uitgevoerd. De rijen met uitgebreide informatie zijn alleen verborgen en worden pas zichtbaar na aanklikken. (zie broncode)
Dit wilde ik verbeteren door ajax implementatie. Wanneer er op een film wordt geklik haalt de database de betreffende informatie op en geeft dit terug als html. Nu heb ik nog nooit eerder iets met Ajax gedaan en ben ik vrij slecht met JavaScript, dus ik stuit op een aantal problemen.
Wat ik met Ajax geklust heb is hier te bezichtigingen: http://www.tomrunia.nl/dev/index_ajax.php
In Firefox werkt dit prima. In Chrome werkt het ook, maar beduidend langzamer dan in FF. In IE werkt het niet......Wat doe ik fout? Ik heb zelf al verschillende dingen geprobeerd, maar het mag niet baten. Ik weet het niet meer. Iemand die me kan helpen?
Verder zijn tips wat betreft verbetering van de JavaScript / algemene opbouw ook meer dan welkom! Ik moet nog een hoop leren van Ajax e.d.
Hieronder volgt de code die van belang is.
Aanroepen javascript functie door te klikken op een rij:
De javascript functies die van belang zijn:
En dan na alle benodigde checks en benaderen database, wordt deze html uitgespuugd door ajax_getmovieinfo.php
Door op een rij te klikken krijg je uitgebreide informatie over de film. Zoals het op de bovenstaande link wordt uitgevoerd is best wel een ranzige oplossing eigenlijk. Bij het laden van de pagina wordt alle data geladen en als html uitgevoerd. De rijen met uitgebreide informatie zijn alleen verborgen en worden pas zichtbaar na aanklikken. (zie broncode)
Dit wilde ik verbeteren door ajax implementatie. Wanneer er op een film wordt geklik haalt de database de betreffende informatie op en geeft dit terug als html. Nu heb ik nog nooit eerder iets met Ajax gedaan en ben ik vrij slecht met JavaScript, dus ik stuit op een aantal problemen.
Wat ik met Ajax geklust heb is hier te bezichtigingen: http://www.tomrunia.nl/dev/index_ajax.php
In Firefox werkt dit prima. In Chrome werkt het ook, maar beduidend langzamer dan in FF. In IE werkt het niet......Wat doe ik fout? Ik heb zelf al verschillende dingen geprobeerd, maar het mag niet baten. Ik weet het niet meer. Iemand die me kan helpen?
Verder zijn tips wat betreft verbetering van de JavaScript / algemene opbouw ook meer dan welkom! Ik moet nog een hoop leren van Ajax e.d.
Hieronder volgt de code die van belang is.
Aanroepen javascript functie door te klikken op een rij:
PHP:
1
| <tr id="basisRow<?php echo $counter; ?>" class="<?php echo $trClass; ?>" onclick="javascript:getMovieInfo(<?php echo $uid.", ".$id.", ". $counter.", ". $showDVDcolumn.", ". $showDIVXcolumn.", ". $showHDcolumn; ?>);"> |
De javascript functies die van belang zijn:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| function getMovieInfo(userID, movieID, counter, showDVD, showDIVX, showHD) { // Als er al een rij uitgeklapt is, deze inklappen if (expandRow !== '') { document.getElementById("basisRow" + expandRow).style.display = ''; document.getElementById("infoRow" + expandRow).style.display = 'none'; } document.getElementById("basisRow" + counter).style.display = 'none'; document.getElementById("infoRow" + counter).style.display = ''; xmlhttp = GetXmlHttpObject(); if (xmlhttp == null) { alert ("Your browser does not support HTTP requests."); return; } // Antwoord van server afhandelen xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById("infoRow" + counter).innerHTML = xmlhttp.responseText; expandRow = counter; } } var page = "ajax_getmovieinfo.php"; var params = "uid=" + userID + "&mid=" + movieID + "&showdvd=" + showDVD + "&showdivx=" + showDIVX + "&showhd=" + showHD; xmlhttp.open("POST", page, true); //Send the proper header information along with the request xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.setRequestHeader("Connection", "close"); xmlhttp.send(params); } function hideMovieInfo(counter) { document.getElementById("basisRow" + counter).style.display = ''; document.getElementById("infoRow" + counter).style.display = 'none'; expandRow = ''; } function GetXmlHttpObject() { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject) { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } |
En dan na alle benodigde checks en benaderen database, wordt deze html uitgespuugd door ajax_getmovieinfo.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <td colspan="<?php echo 7+$extraColumn; ?>" class="inforow"> <table width="100%" cellpadding="0" cellspacing="0"> <tr><td class="title" colspan="3"><?php echo $title; ?></td></tr> <tr><td rowspan="18" width="120px"><a href="<?php echo $url; ?>" title="Bezoek de IMDB pagina"><img src="<?php echo $coverLoc; ?>" alt="cover" class="cover"/></a></td></tr> <tr><td width="15%" class="label">Premiere datum</td><td><?php echo $fulldate; ?></td></tr> <tr><td width="15%" class="label">Regisseur</td><td><a href="index.php?dir=<?php echo $director; ?>"><?php echo $director; ?></a></td></tr> <tr><td width="15%" class="label">Genre</td><td><?php echo $genre; ?></td></tr> <tr><td width="15%" class="label">Omschrijving</td><td><?php echo $plot; ?></td></tr> <tr><td width="15%" class="label">Speelduur</td><td><img src="img/clock<?php echo $clock; ?>.gif" title="Speelduur indicatie" alt="klokje" /> <?php echo $runtime; ?> min</td></tr> <tr><td width="15%" class="label">IMDB rating</td><td><?php generateStars($imdbscore, 'imdb'); ?> <?php echo $imdbscore; ?> / 10 </td></tr> <?php if ($row['seen'] == 1 && $row['ownscore'] != 0) { ?><tr><td width="15%" class="label">Cijfer</td><td><?php generateStars($ownscore, 'own'); ?> <?php echo $ownscore; ?> / 10 </td></tr> <?php } if($showDVDcolumn == 1) { ?><tr><td width="15%" class="label">DVD in bezit</td><td><?php echo $dvd_expand; ?></td></tr> <?php } if($showDIVXcolumn == 1) { ?><tr><td width="15%" class="label">DivX in bezit</td><td><?php echo $divx_expand; ?></td></tr> <?php } if($showHDcolumn == 1) { ?><tr><td width="15%" class="label">HD in bezit</td><td><?php echo $hd_expand; ?></td></tr> <?php } ?><tr><td width="15%" class="label">Gezien</td><td><?php echo $seen2; ?></td></tr> <tr><td width="15%" class="label">Trailer</td><td><a href="trailer.php?uid=<?php echo $uid."&id=".$id; ?>" onclick="window.open('trailer.php?uid=<?php echo $uid."&id=".$id; ?>','trailer.php?id=<?php echo $title; ?>','width=480,height=430,scrollbars=no,toolbar=no,location=no'); return false">Klik hier om de trailer te bekijken</a> (Beta)</td></tr> <?php if ($row['comment'] != "") { ?><tr><td width="15%" class="label">Aanvullende informatie</td><td><?php echo stripslashes($row['comment']); ?></td></tr><?php } ?> </table> </td> |