AJAX无法在Internet Explorer 9中运行

时间:2012-03-29 11:13:49

标签: php ajax 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>

我称之为:

 <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>

它适用于大多数浏览器,但使用Internet Explorer 9它根本不起作用。任何人都知道为什么?

更新:我当时没有设法做到这一点。所以我改变了工作的逻辑。谢谢大家的回答。

3 个答案:

答案 0 :(得分:0)

可能是缓存问题。参数测试设置为时间戳值,如:

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

问候!

答案 1 :(得分:0)

检查您的请求如何发送到服务器。双引号是什么样的? IE9,至少使用jQuery,根据这篇文章没有正确编码双引号: Why does this jQuery Ajax call fail ONLY in IE9 (Even works fine in IE8 and IE7)

答案 2 :(得分:0)

我知道这是一个非常古老的问题,但仍然是一个没有实际正确答案的问题....

正确的操作顺序是:

  1. 创建您的请求对象
  2. open连接
  3. 设置onreadystatechange侦听器
  4. send请求
  5. 您的步骤2和3的顺序错误,导致某些浏览器出现问题。