ugrás a tartalomhoz

AJAX probléma - select feltöltés nem megy IE alatt

Anonymous · 2006. Május. 22. (H), 11.49
Most kezdtem ele az AJAX-ot nézegetni és első nekirugaszkodásként megpróbálkoztam egy másik select-től függő select-box feltöltésével.
A gond annyi, hogy FF-ben rendben működik, de IE-ben "ismeretlen futásidejű hiba" üzenetet ad.

a kód:
  1. var url = "ajax_hajo.php?beszallito_id=";   
  2.   
  3. function handleHttpResponse()   
  4. {  
  5.   
  6.   if (http.readyState == 4)   
  7.   {  
  8.     if (http.responseText.indexOf('invalid') == -1)   
  9.     {  
  10.       var out_text = '';   
  11.   
  12.       var xmlDocument = http.responseXML;  
  13.       x = xmlDocument.documentElement.childNodes;  
  14.       for(var i=0; i< x.length; i++)  
  15.       {                              
  16.          out_text += '<option value="' + xmlDocument.getElementsByTagName('value').item(i).firstChild.nodeValue   
  17.                   + '"'   
  18.                   + xmlDocument.getElementsByTagName('selected').item(i).firstChild.nodeValue   
  19.                   + '>'   
  20.                   + xmlDocument.getElementsByTagName('option').item(i).firstChild.nodeValue  
  21.                   + '</option>';  
  22.        }   
  23.                                  
  24.        document.getElementById('kategoria_id').innerHTML = out_text;        
  25.          
  26.        isWorking = false;        
  27.     }     
  28.   }  
  29.   
  30. }  
  31.   
  32. var isWorking = false;  
  33.   
  34. function liste_load()   
  35. {        
  36.  if (!isWorking && http)   
  37.  {  
  38.     var beszallito_id = document.getElementById("beszallito_id").value;  
  39.   
  40.     http.open("GET", url + escape(beszallito_id), true);  
  41.   
  42.     http.onreadystatechange = handleHttpResponse;  
  43.   
  44.     isWorking = true;  
  45.   
  46.     http.send(null);  
  47.   }  
  48. }  
  49.   
  50. function getHTTPObject() {  
  51.   
  52.   var xmlhttp;  
  53.   
  54.   if (window.XMLHttpRequest)  
  55.   {  
  56.      xmlhttp=new XMLHttpRequest();  
  57.      if(xmlhttp)  
  58.      {  
  59.         alert('FF http objektum OK');   
  60.      }  
  61.   }  
  62.   // code for IE  
  63.   else if (window.ActiveXObject)  
  64.   {  
  65.      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")  
  66.      if(xmlhttp)  
  67.      {  
  68.         alert('IE http objektum OK');   
  69.      }  
  70.          
  71.   }  
  72.   return xmlhttp;    
  73. }  
  74.   
  75. var http = getHTTPObject();   
a feltöltendő select:
  1. <select name="kategoria_id" id="kategoria_id">              
  2. </select>  
Hol lehet a hiba, ami miatt nem megy IE-ben?
Előre is köszönöm a segítséget.

laci
 
1

new Option()?

sotetbarna · 2006. Május. 22. (H), 12.26
Hali!

Én a szövegösszefűzögetés helyett az opciókat szépen feltölteném a new Option(text, value) javascriptes utasítássall, bár ajaxos hibát tesztkörnyezet nélkül nehéz debuggolni.
Bövebb infó a new Option használatáról például itt: http://www.experts-exchange.com/Web/Web_Languages/Q_20916437.html

Talán értelmesebb hibaüzenetet kapsz, ha bekapcsolod a Microsoft Script Debuggert (ha nincs telepítve, a microsoft-tól le lehet tölteni ingyen), bár a firebugtól elég messze van...

És talán a protoype-ot is érdemes lenne kipróbálnod: http://prototype.conio.net/, már magyar doksi is van hozzá.

Barna
2

Ajax

Anonymous · 2006. Május. 22. (H), 13.02
Ajaxozáshoz mindenféleképpen érdemes valami létező library-t használni:
http://prototype.conio.net/
http://xkr.us/code/javascript/XHConn/
http://microformats.org/wiki/rest/ahah

Százmilliószor jobban jársz, mintha a onreadystatechange-ekkel bírkóznál.

Gyulus
3

xml

Anonymous · 2006. Május. 22. (H), 17.57
Nem vagyok benne biztos, de lehet hogy az xml-es megoldas nem megy IE alatt.
En JSON-t hasznalok az adatkommunikaciora. Az megy mindket "nagy" bongeszo alatt. Valamint az IE meg az adatacsere karakterkodolasaban kulonbozik az FF-tol. utf-vs-megadott tipus.

Szerintem nem baj ha sajat ajax fv-eket hasznal az ember. Nem nagy kunszt. Minek toltsek be egy tobb szaz k-s libraryt 20-30 sor javascriptert....
5

tobb szaz k-s library?

Anonymous · 2006. Május. 22. (H), 19.54
Nézted is a linkeket, vagy csak írsz?
Az XHConn.js az negyven rövid sor, az ahah.js pedig hamincegy.
A prototype.js-nek pedig csak egy darabja az Ajax-os rész, és még így sem éri el az 50 KB-ot.

Az xml-es megoldás megy IE alatt.

Gyulus
4

köszi

Anonymous · 2006. Május. 22. (H), 18.29
köszönöm az eddigi hozzászólásokat. Még nagyon az elején vagyok és egyenlőre ilyen egyszerű ujjgyakorlatokkal próbálom felfogni a dolog lényegét.

A hiba valahol tutira ebben a kódrészletben van.
  1. x = xmlDocument.documentElement.childNodes;  
  2.   
  3. out_text +='<select name="kategoria_id">';  
  4. out_text += '<option value="0">válassz kategóriát</option>'  
  5. for(var i=0; i< x.length; i++)  
  6. {                              
  7.     out_text += '<option value="' + xmlDocument.getElementsByTagName('value').item(i).firstChild.nodeValue   
  8.             + '"'   
  9.             + xmlDocument.getElementsByTagName('selected').item(i).firstChild.nodeValue   
  10.             + '>'   
  11.             + xmlDocument.getElementsByTagName('option').item(i).firstChild.nodeValue  
  12.             + '</option>';  
  13.                       
  14.  }   
  15.  out_text +='</select>';                          
  16.  document.getElementById('select').innerHTML = out_text;  
Igy már IE-ben is létrejön az üres select, csak a tartalom hiányzik :(
Na mindegy, bújom a tutoriálokat, de ha valakinek ötlete van, köszönettel veszem.

Laci
6

ie innerHTML bug

toxin · 2006. Júl. 15. (Szo), 15.03
http://support.microsoft.com/default.aspx?scid=kb;en-us;276228

üdv t