2010-12-10 18 views
1

Ok, also ich kann analysieren Sie die XML mit jQuery, aber es scheint nur in FireFox und nicht IE zu arbeiten.Parsing XML mit jQuery

Meine XML-Datei:

<?xml version="1.0" encoding="utf-8" ?> 
<Answers> 
    <Question> 
     <question-title>Question One - Title</question-title> 
     <a>24</a> 
     <b>36</b> 
     <c>10</c> 
     <d>30</d> 
    </Question> 
</Answers> 

Mein Code, der die XML analysiert:

var xmlType = 'xml'; 
     if ($.browser.msie) { 
      xmlType = 'text/xml' 
     } 
$.ajax({ 
      type: "GET", 
      url: "answers.xml", 
      dataType: xmlType, 
      success: function(xml) { //if the XML exists 
       $(xml).find('Answers').each(function(){ //go inside answers 
        $(this).find('Question').each(function(){ //for each question... 
         var moo = $(this).find('question-title').text(); 
         $('.question-title').append(moo); //append the question title 

         var a = $(this).find('a').text(); 
         var b = $(this).find('b').text(); 
         var c = $(this).find('c').text(); 
         var d = $(this).find('d').text(); 

         $('.label1').html(a+'%'); 
         $('.label2').html(b+'%'); 
         $('.label3').html(c+'%'); 
         $('.label4').html(d+'%'); 

         $('.input1').val(a); 
         $('.input2').val(b); 
         $('.input3').val(c); 
         $('.input4').val(d); 

         $('.cu-mid','.cuboid.'+'green1').animate({ 
          height: a 
         }, 550); 
         $('.cu-mid','.cuboid.'+'green2').animate({ 
          height: b 
         }, 550); 
         $('.cu-mid','.cuboid.'+'green3').animate({ 
          height: c 
         }, 550); 
         $('.cu-mid','.cuboid.'+'green4').animate({ 
          height: d 
         }, 550, function() { 

          $('.cu-mid').animate({ 
           height: '+='+50 
          }, 550); 

         }); 
        }); 
       }); 
      } 
     }); 

Der Ausgang in FireFox ist die richtige - Höhen auf den erforderlichen Elemente. Aber in IE - nichts ... zip ... nada ...

Ich dachte zuerst, dass dies die dataType sein könnte, so fügte ich eine if Erklärung ... Das half auch nicht.

Irgendwelche Ideen clever bods ?!

Prost.

bearbeiten: Ich nehme die folgenden Fehler in IE erhalten:
Invalid Argument Linie 66 - die Endung Klammer in: $(xml).find('Answers').each(function(){
Objekt erwartet Linie 1 - ???

+0

Sind Sie einen Fehler jeglicher Art zu bekommen? Versuchen Sie auch einmal, die Titelzeilen zu kommentieren, um zu sehen, ob es einen Unterschied macht. –

+0

Bearbeitete meine Frage, enthielt zwei Fehler (oh, und das Auskommentieren der Titelzeilen änderte nichts) –

+0

@Neurofluxation - nur neugierig, hat '$ (xml) .filter ('Answers')' irgendwelche Auswirkungen in IE? (statt '.find()')? –

Antwort

1

Nevermind, dachte ich es aus:

function runQuiz(whichQ) { 
      if (window.XMLHttpRequest) { 
       xmlhttp = new XMLHttpRequest(); 
      } else { 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      xmlhttp.open("GET", whichQ, false); 
      xmlhttp.send(); 
      xmlDoc = xmlhttp.responseXML; 

      var a = xmlDoc.getElementsByTagName("a"); 
      var a2 = $(a).text(); 
      var b = xmlDoc.getElementsByTagName("b"); 
      var b2 = $(b).text(); 
      var c = xmlDoc.getElementsByTagName("c"); 
      var c2 = $(c).text(); 
      var d = xmlDoc.getElementsByTagName("d"); 
      var d2 = $(d).text(); 

      $('.label').fadeOut(350); 
      $('.cu-mid','.cuboid.'+'green1').animate({ height: a2 }, 550); 
      $('.cu-mid','.cuboid.'+'green2').animate({ height: b2 }, 550); 
      $('.cu-mid','.cuboid.'+'green3').animate({ height: c2 }, 550); 
      $('.cu-mid','.cuboid.'+'green4').animate({ height: d2 }, 550, function() { 
       $('.cu-mid').animate({ 
        height: '+='+50 
       }, 550, function() { 
        $('.label1').html(a2+'%'); 
        $('.label2').html(b2+'%'); 
        $('.label3').html(c2+'%'); 
        $('.label4').html(d2+'%'); 
        $('.label').fadeIn(350); 
       }); 
      }); 
     } 

$(document).ready(function() { 
    runQuiz('question1.xml'); 
}); 
+0

Also ist die Lösung ein ActiveX-Objekt zu verwenden, wenn in IE? (dh Feature-Erkennung) –

+0

Tatsächlich schien es sinnvoller zu sein, die gesamte Funktion als Nicht-jQuery zu haben –

0

Es gibt Unterschiede, wie ein xmlHttpRequest Objekt in Internet Explorer-Versionen am besten erhalten.

Siehe MSDN Hinweise auf XMLHttpRequest Object