Avatar billede wedia Nybegynder
28. januar 2009 - 10:07 Der er 6 kommentarer og
1 løsning

IE7 ajax problem

Hej Eksperter,

Jeg har et problem med at hente noget xml data ind via ajax. Problemmet kommer dog kun i IE7 og 50/50 i IE8 RC1, mens det køre fint i firefox.
Det data jeg henter kommer jeg i et array som jeg derefter kan bruge i en paging funktion. Men det virker som om at IE ser array'et som tomt, men hvis jeg reloader siden så virker det også i IE7 ??  Min kode ser sådan her ud:

var receiveReq = getXmlHttpRequestObject();
var pagingCount = 0;
var productArray = new Array();
       
        function getXmlHttpRequestObject() {
                if (window.XMLHttpRequest) {
                    return new XMLHttpRequest();
                } else if(window.ActiveXObject) {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                   
                }
            }

function getProducts(param,page) {
           
        if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
                    receiveReq.open('Post', page, true);
                    receiveReq.onreadystatechange = handleReceiveProduct;
                    var datenow = new Date();
                                    param += "&time" + datenow;
                                   
                    receiveReq.send(param);
                }           
            }

function handleReceiveProduct() {
           
                if (receiveReq.readyState == 4) {
                   
                    var xmldoc = receiveReq.responseXML;
                    var message_node = xmldoc.getElementsByTagName("message");
                    var n_message = message_node.length;
                       
                    var HtmlReturn = "";
                   
                                       
                    for (i = 0; i < n_message; i++) {
                    var id_node = message_node[i].getElementsByTagName("id");
                    var name_node = message_node[i].getElementsByTagName("name");
                    var description_node = message_node[i].getElementsByTagName("description");
                    var description2_node = message_node[i].getElementsByTagName("description2");
                    var status_node = message_node[i].getElementsByTagName("status");
                    var category_node = message_node[i].getElementsByTagName("category");
                   
                    productArray[i] = "<div class=\"productlist_box\"><h3><div class=\"highlight\">[</div><div class=\"header_text\">" + name_node[0].firstChild.nodeValue + "</div><div class=\"highlight\">]</div></h3>";
                    productArray[i] += "<div class=\"productlist_select\"><div class=\"productlist_info\"><div class=\"productlist_img\"><img src=\"ui/product_small.jpg\" /></div><!-- product img end -->";
                    productArray[i] += "<div class=\"productlist_text\">"+ description_node[0].firstChild.nodeValue +"</div><!-- product text end --></div><!-- productlist info end -->  ";
                    productArray[i] += "<div class=\"productlist_price\">$ 1250.00 (incl. vat $ 1500.00)</div><!-- product price end -->";
                    productArray[i] += "<div class=\"productlist_btn\"><a href=\"\">Add to shopping cart</a></div><!-- product list btn end --></div><!-- product select end -->";
                    }
                   
                        productPaging(0,5)           
                }
               
               
            }
           
           
            function productPaging(n,m){
           
                pagingCount += n;
           
                var doc = document.getElementById("productlistbox");
           
                doc.innerHTML = "";
           
                var c = 0;
           
                for(var p = 0; p < m; p++){
               
                        if(c ==0){
                        doc.innerHTML +="<div class=\"productlist\">";
                        }
                        var max = pagingCount+p;
                       
                        if(max >= 0 && max < productArray.length){
                        doc.innerHTML += productArray[p+pagingCount];
                       
                        }
               
               
               
                        if(max >= 0 && max < productArray.length && c==0){
                        doc.innerHTML += "<div class=\"productlist_split\">&nbsp;</div>";
                        }
               
                        if(c == 1){
                        doc.innerHTML += "</div>";
                        c=-1;
                        }           
               
                        c++;
               
                }
           
               
           
            }
Avatar billede olebole Juniormester
28. januar 2009 - 10:13 #1
<ole>

Når nu man vælger en forholdsvis moderne teknik som Ajax, kan det undre, man samtidig vælger at bruge innerHTML, som er et tussegammelt levn fra version 4-browserne - som er uhensigtsmæssigt - og som aldrig har været valid i nogen standard  =)

Anyway, så prøv at alert'e n_message, så du kan se, hvormange childnodes, der faktisk er.

/mvh
</bole>
Avatar billede wedia Nybegynder
28. januar 2009 - 10:21 #2
Det har jeg prøvet og FireFox retuner 11 som er der rigtige antal mens IE7 i første omgang retuner 0 men ved reload 11 ? og IE8 retuner 50% af første gangs load 0 men ellers 11 ?
Avatar billede wedia Nybegynder
28. januar 2009 - 10:23 #3
her er xml filen (product.xml)

- <root>
- <message>
  <id>1</id>
  <name>dell pc insperion</name>
  <description>some text</description>
  <description2>the long text</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>2</id>
  <name>monster truck</name>
  <description>so</description>
  <description2>som</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>3</id>
  <name>dell screen</name>
  <description>lkj</description>
  <description2>kljkj</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>4</id>
  <name>x20</name>
  <description>kl</description>
  <description2>kljlkj</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>5</id>
  <name>x21</name>
  <description>æøl</description>
  <description2>uhii</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>6</id>
  <name>x22</name>
  <description>sdbh</description>
  <description2>efjknf</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>7</id>
  <name>x23</name>
  <description>gsdu</description>
  <description2>idghf</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>8</id>
  <name>x24</name>
  <description>dfh</description>
  <description2>idhsf</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>9</id>
  <name>x25</name>
  <description>kj</description>
  <description2>gfv</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>10</id>
  <name>x26</name>
  <description>gjksdkhg</description>
  <description2>hsf</description2>
  <status />
  <category>1</category>
  </message>
- <message>
  <id>11</id>
  <name>x27</name>
  <description>jksaf</description>
  <description2>ghdfc</description2>
  <status />
  <category>1</category>
  </message>
  </root>
Avatar billede olebole Juniormester
28. januar 2009 - 11:21 #4
Fejlen synes at ligge et andet sted. Prøv at lægge et link til et eksempel
Avatar billede wedia Nybegynder
28. januar 2009 - 11:46 #5
Du kan finde de fire filer (html, js, css, xml) jeg bruger her :
http://wedia.dk/ajaxtest/ajaxtest.zip
Avatar billede olebole Juniormester
28. januar 2009 - 22:39 #6
Jeg kan ikke bruge en zip til noget. Prøv at lægge et link til et fungerende eksempel
Avatar billede wedia Nybegynder
29. januar 2009 - 14:58 #7
jeg har droppet at gøre der via ajax, det ville også blive for usøgemaskineoptimeret når det er en pagiong funktion til produkter ! Så lukker !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester