Archive for the 'AJAX' Category

Firefox (<= 2.0.0.7), parsando la risposta XML di una richiesta con XMLHttpRequest, tronca il textNode a 4096k.

E’ un dato di fatto e ne ho le prove (bestemmie e sangue amaro fino alle 8 di sera un giorno in ufficio). Non so perchè ma è così, e sembra che il comportamento sia condiviso anche da Opera (9.23, la versione che ho attualmente e su cui l’ho riscontrato). Il problema su IE6 e IE7 non si presenta.

Quindi cosa ne fa Firefox degli altri bytes rimanenti del textNode? Alloca N childNodes.

Esiste una soluzione a questo problema, cioè normalizzare l’oggetto XML creato con la responseXML con il metodo normalize()

  1.  
  2. function func()
  3. {
  4.         var xmlhttp = new XMLHttpRequest();
  5.         xmlhttp.open(‘GET’, url, true);
  6.         xmlhttp.onreadystangechange = function()
  7.         {
  8.                 if (xmlhttp.readyState == 4)
  9.                 {
  10.                         if (xmlhttp.status == 200)
  11.                         {
  12.                                 var doc = xmlhttp.responseXML;
  13.                                 var html = ;
  14.                                 if (doc.evaluate())
  15.                                 {
  16.                                         doc.normalize();
  17.                                         html = doc.getElementsByTagName(’string’)[0].childNodes[0].nodeValue;
  18.                                 }
  19.                                 else
  20.                                         html = doc.text;  
  21.  
  22.                                 return html;
  23.                         }
  24.                 }
  25.         }
  26. }

tip: la funziona evaluate()  è utile per capire se si è sotto Firefox\Opera o Internet Explorer e differenziare il metodo di interrogazione dell’XML (perchè ovviamente non sono uguali :) )