[ajax] xml uitlezen in ff
Ik ben bezig met de foutafhandeling van een script dat xml genereerd. Wanneer er iets fout gaat word het volgende xml bestandje teruggegeven:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?xml version="1.0" ?>
<!DOCTYPE error [
<!ELEMENT error (#PCDATA)>
]>
<error>
foutmelding
</error>
<!DOCTYPE error [
<!ELEMENT error (#PCDATA)>
]>
<error>
foutmelding
</error>
Dit is de javascript die hem moet verwerken(dit is nog enkel om te kijken wat de browser precies doet, als hij doet wat ik wil dat hij doet ga ik kijken of de tagname error is.):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function get_file(file,functie)
{
var xmlDoc;
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "doc", null);
xmlDoc.onload = eval(functie);
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function ()
{
if (xmlDoc.readyState == 4)
eval(functie);
}
}
xmlDoc.load(file);
}
function check_updates(xmlDoc)
{
alert(xmlDoc.firstChild.tagName);
}
{
var xmlDoc;
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "doc", null);
xmlDoc.onload = eval(functie);
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function ()
{
if (xmlDoc.readyState == 4)
eval(functie);
}
}
xmlDoc.load(file);
}
function check_updates(xmlDoc)
{
alert(xmlDoc.firstChild.tagName);
}
Dit stukje html roept alles aan:
Code (php)
1
2
2
<script type="text/javascript" src="javascript_test.js"></script>
<button onclick="get_file('check_updates.php','check_updates(xmlDoc);')" name=check >check</button>
<button onclick="get_file('check_updates.php','check_updates(xmlDoc);')" name=check >check</button>
IE7 geeft terug: error, FF geeft terug: doc , opera geeft terug: undefined
Heeft iemand een idee waaraan dat kan liggen?
Gewijzigd op 01/01/1970 01:00:00 door Stijn
In javascript zijn functies objecten, en kan je die dus gewoon als parameter meegeven.
Code (php)
1
2
3
4
5
2
3
4
5
function get_file(file,functie){
var xmlDoc;
functie(xmlDoc);
}
<button onclick="get_file('check_updates.php', check_updates)" name=check >check</button>
var xmlDoc;
functie(xmlDoc);
}
<button onclick="get_file('check_updates.php', check_updates)" name=check >check</button>
Bepaal je zelf de xml die terug komt?
Ohwja en als je normaal wilt kunnen debuggen, zorg dat je de Firebug extensie voor Firefox download. Als je ook maar iets met javascript doet is het een echte must have.
Gewijzigd op 01/01/1970 01:00:00 door Christiaan Baartse
Parameters in javascript zal ik ff aanpassen
Ik weet ook zeker dat het xml bestand goed is, als ik het namelijk los bekijk is hij ook goed.
Ik gebruik namelijk veel liever JSON voor ajax calls
Nee, alleen voor dat stuk javascript..
Je error php page ding
Code (php)
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
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
<?php
$errors = array():
$errors[] = 'foutmelding';
print(json_encode($error));
[/code]
Om het aan de client side op te halen kan je 2 dingen doen. Een JS library gebruiken, of je eigen ajax functie schrijven.
Voor nu ga ik voor de makkelijke methode, namelijk de eerste. JQuery is zo'n library http://docs.jquery.com/
Om de foutmelding nu in js te krijgen doen we het volgende
<script type="text/javascript" src="jquery-1.2.3.js"></script>
<script type="text/javascript">
function get_the_file(){
$.getJSON('de mooie php pagina\'s url', function(data){
// Dit toont onze eerste error melding uit de array.
// Data is dus eigenlijk de array die we in onze php pagina hadden!
alert(data[0]);
});
}
</script>
<button onclick="get_the_file();" name=check >check</button>
Om dan helemaal in de jquery spirit te blijven kan het ook nog zo
<script type="text/javascript" src="jquery-1.2.3.js"></script>
<script type="text/javascript">
$(function(){
$("#check").click(function(){
$.getJSON('de mooie php pagina\'s url', function(data){
// Dit toont onze eerste error melding uit de array.
// Data is dus eigenlijk de array die we in onze php pagina hadden!
alert(data[0]);
});
});
});
</script>
<button id="check" >check</button>
$errors = array():
$errors[] = 'foutmelding';
print(json_encode($error));
[/code]
Om het aan de client side op te halen kan je 2 dingen doen. Een JS library gebruiken, of je eigen ajax functie schrijven.
Voor nu ga ik voor de makkelijke methode, namelijk de eerste. JQuery is zo'n library http://docs.jquery.com/
Om de foutmelding nu in js te krijgen doen we het volgende
<script type="text/javascript" src="jquery-1.2.3.js"></script>
<script type="text/javascript">
function get_the_file(){
$.getJSON('de mooie php pagina\'s url', function(data){
// Dit toont onze eerste error melding uit de array.
// Data is dus eigenlijk de array die we in onze php pagina hadden!
alert(data[0]);
});
}
</script>
<button onclick="get_the_file();" name=check >check</button>
Om dan helemaal in de jquery spirit te blijven kan het ook nog zo
<script type="text/javascript" src="jquery-1.2.3.js"></script>
<script type="text/javascript">
$(function(){
$("#check").click(function(){
$.getJSON('de mooie php pagina\'s url', function(data){
// Dit toont onze eerste error melding uit de array.
// Data is dus eigenlijk de array die we in onze php pagina hadden!
alert(data[0]);
});
});
});
</script>
<button id="check" >check</button>
Gewijzigd op 01/01/1970 01:00:00 door Christiaan Baartse
Is er een functie die xmlDoc.xml kan vervangen die in FF werkt?
Gewijzigd op 01/01/1970 01:00:00 door stijn
Kan je iets meer toelichten? Mischien ook waarvoor het dient, oftewel wat gebeurt er als er geen error gestuurt wordt.
Als er geen error word gestuurd, word er zoiets teruggestuurd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<updates>
<beurt changed=1>5</beurt>
<boden changed=1>
<totaalbod>100050</totaalbod>
<bod speler="103">500</bod>
<bod speler="505">1000</bod>
<maxbod>1000</maxbod>
</boden>
<ronde changed=1>
<veld>
<kaart>link</kaart>
//nog 4x kaart
</veld>
<gebruiker>
2x kaart
</gebruiker>
</ronde>
<spelers changed=0>
</spelers>
</updates>
<beurt changed=1>5</beurt>
<boden changed=1>
<totaalbod>100050</totaalbod>
<bod speler="103">500</bod>
<bod speler="505">1000</bod>
<maxbod>1000</maxbod>
</boden>
<ronde changed=1>
<veld>
<kaart>link</kaart>
//nog 4x kaart
</veld>
<gebruiker>
2x kaart
</gebruiker>
</ronde>
<spelers changed=0>
</spelers>
</updates>
Je zou dat ook allemaal om kunnen gooien naar JSON, ik weet niet in welk stadium je bent op dit moment met de Javascript.