Hallo,

Ik ben bezig met de foutafhandeling van een script dat xml genereerd. Wanneer er iets fout gaat word het volgende xml bestandje teruggegeven:


<?xml version="1.0" ?>
 <!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.):

	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);
	}


Dit stukje html roept alles aan:

<script type="text/javascript" src="javascript_test.js"></script>
<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?
waarom eval(functie); ?
In javascript zijn functies objecten, en kan je die dus gewoon als parameter meegeven.

function get_file(file,functie){
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.
Firebug is al geïnstalleerd(geen foutmeldingen).
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.
Genereer je de XML alleen voor dat stuk javascript of is er een andere reden dat je XML gebruikt?
Ik gebruik namelijk veel liever JSON voor ajax calls
Nee, alleen voor dat stuk javascript..
Als je op deze manier AJAX calls gaat maken wordt het pas echt leuk om te doen :D

Je error php page ding

<?php
$errors = array():
$errors[] = 'foutmelding';
print(json_encode($error));


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>
Hij geeft iets tussen <error></error> terug als er iets fout is gegaan. Maar als alles goed gaat geeft hij een hele lijst met informatie terug.


Is er een functie die xmlDoc.xml kan vervangen die in FF werkt?
Euh ik snap even het verschil niet tussen jouw bovenstaande methode en de mijne eigenlijk..
Kan je iets meer toelichten? Mischien ook waarvoor het dient, oftewel wat gebeurt er als er geen error gestuurt wordt.
Het is een poker spel, zo kan de beurt, spelers, geld, boden, open liggende kaarten veranderen.
Als er geen error word gestuurd, word er zoiets teruggestuurd:

<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>

Tja daar was ik dus al bang voor ;)
Je zou dat ook allemaal om kunnen gooien naar JSON, ik weet niet in welk stadium je bent op dit moment met de Javascript.

Reageren