2012-03-29 2 views
1

Das ist meine Funktion:AJAX arbeiten nicht in Internet Explorer 9

<script type="text/javascript"> 
function loadXMLDoc() { 
    var x = document.getElementById("trazi_drzava"); 
    var xmlhttp; 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("trazi_grad").innerHTML = xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET", "gradovi.php?selected=" + x.value, true); 
    xmlhttp.send(); 
} 
</script> 

und ich nenne es wie folgt aus:

<select name="td" id="trazi_drzava" onchange="loadXMLDoc()"> 
    <option value="">Država</option> 
    <?php 
    $sel_grad_arr=array(); 
    $sel_grad_arr[]="<select name='tg' id='grad0'> 
    <option value=''>Grad</option</select>"; 
    if($q=mysql_query("SELECT drzava_id,drzava FROM drzava")){ 
    while($r=mysql_fetch_assoc($q)){ 
     echo '<option value="'.$r['drzava_id'].'">'.$r['drzava'].'</option>'; 
     } 
    }else echo mysql_error().__LINE__; 
    ?> 
    </select><select name="tg" id="trazi_grad"> 
     //code that ajax should load   
    </select> 

Es funktioniert gut mit den meisten Browsern, aber mit Internet Explorer 9 es doesn arbeite überhaupt nicht. Jeder hat eine Idee warum?

UPDATE: Ich habe es dann nicht geschafft. Also habe ich die Logik der Arbeit total geändert. Danke allen für die Antworten.

+0

Stichwort ist jQuery oder andere Javascript Rahmen ... http://api.jquery.com/jQuery.ajax/ –

+0

Webarto Leider verstehe ich nicht ... –

+0

Was ausfällt? Fügen Sie Debug-Anweisungen hinzu. Läuft die Funktion überhaupt? Wird die HTTP-Anfrage gestellt? Sie sagen, es "funktioniert gut mit jedem anderen Browser", so dass es in Internet Explorer 8 funktioniert? – Quentin

Antwort

0

Ich weiß, dass dies eine sehr alte Frage, aber nach wie vor, ein ohne tatsächlich richtige Antwort ....

Die richtige Reihenfolge der Operationen ist:

  1. erstellen Sie Ihre Anfrage Objekt
  2. open eine Verbindung
  3. Set onreadystatechange Zuhörer
  4. send Anfrage

Sie haben die Schritte 2 und 3 in der falschen Reihenfolge, die Probleme in bestimmten Browsern verursacht.

0

Vielleicht ist es ein Cache-Problem. Parameter-Test als Zeitstempel Wert eingestellt, so etwas wie:

xmlhttp.open("GET","gradovi.php?selected="+x.value+"&t="+parseInt(new Date().getTime().toString().substring(0, 10)),true); 
xmlhttp.send(); 

Grüße!

+0

Danke, aber das ist kein Problem. Es gibt ein Problem mit IE 9 –

+0

Wenn ich mich richtig erinnere, hatte ich ein ähnliches Problem, das nur mit IE9 aufgetreten ist. Mein Problem war der Cache von IE9 und der Befehl, der löste. Wie auch immer, viel Glück! ;) – Lobo

+0

Ich habe das versucht, und es funktioniert immer noch nicht ... Danke trotzdem –

0

Überprüfen Sie, wie Ihre Anfrage an den Server gesendet wird. Wie sehen die Anführungszeichen aus? IE9, zumindest mit jQuery, kodiert nicht doppelten Anführungszeichen richtig nach diesem Beitrag: Why does this jQuery Ajax call fail ONLY in IE9 (Even works fine in IE8 and IE7)

+1

Nein! Das versuche ich auch, aber nichts passiert! Ich hasse IE! –

+0

@Marko Dies ist ein wirklich langer Schuss, aber vielleicht hilft das: http://cggallant.blogspot.com/2011/03/xmlhttprequest-calls-when-in-ie-9-9 Zitat: "Das XMLHttpRequest-Objekt gibt immer noch ein MSXML-ActiveX-Objekt aus der Eigenschaft reponseXML, unabhängig davon, welchen Dokumentkompatibilitätsmodus IE 9 verwendet Das MSXML-ActiveX-XML-Objekt ist nicht mit dem DOMParser-XML-Objekt kompatibel und führt zu einem "Typenkonflikt" -Fehler, wenn Sie versuchen, das eine XML-Objekt anzufügen zu den anderen." Auch die Verwendung von jQuery kann Ihnen eine Menge Ärger ersparen, wie es von Webarto vorgeschlagen wurde ... –