Javascript IE9(和其他IE版本)的AJAX问题

Javascript IE9(和其他IE版本)的AJAX问题,javascript,ajax,xmlhttprequest,internet-explorer-9,activexobject,Javascript,Ajax,Xmlhttprequest,Internet Explorer 9,Activexobject,我在IE9、IE8和IE7中都遇到了XMLHttpRequest对象的问题,尽管我没有在IE7中测试过。它在FF4、Opera 11.01和Chrome 10中工作正常。 首先,我想解释一下我使用这段代码的原因。我有一个HTML选择标记,其中定义了选项时间。然后,当用户单击按钮时,它会使用数据库中的时间值动态更新select。下面是创建XMLHttpRequest对象的代码: var xmlhttp = false; if (window.XMLHttpRequest) { xm

我在IE9、IE8和IE7中都遇到了XMLHttpRequest对象的问题,尽管我没有在IE7中测试过。它在FF4、Opera 11.01和Chrome 10中工作正常。 首先,我想解释一下我使用这段代码的原因。我有一个HTML选择标记,其中定义了选项时间。然后,当用户单击按钮时,它会使用数据库中的时间值动态更新select。下面是创建XMLHttpRequest对象的代码:

var xmlhttp = false;
if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                xmlhttp = false;
            }
        }
    }
如您所见,如果XMLHttpRequest对象的创建失败,它将尝试创建ActiveXObject

现在是发送请求和获取响应的代码:

xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById(time).innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "getTime.php?d=" + str, true);
      xmlhttp.send();
我将参数发送到getTime.php,然后将响应写回select标记,id=time。现在在IE9和IE8中,它不希望用来自DB的时间填充select标记

编辑: 我将添加getTime.php中的代码:

<?php
$username="something";
$password="";
$database="somethingDB";

$date = $_GET["d"];
$timestamp = strtotime($date);
$nextDay= $timestamp + (1 * 24 * 60 * 60);// 7 days; 24 hours; 60 mins; 60secs
$date2 =  date('Y/n/j', $nextDay);


$link = mysql_connect('localhost', $username, $password);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db($database, $link);
$query="SELECT TIME(Date) FROM someTable WHERE Date >= '" .$date. "' AND Date < '" .$date2. "'";
$result=mysql_query($query);
if (!$result) {
    die('Could not query:' . mysql_error());
}
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<option>" .$row[0]."</option>";
}

mysql_free_result($result);

mysql_close($link);
?>

我找到了正确的解决方案。我在div框中已经有了select标记,缺少的代码是这部分:

document.getElementById('box').style.display = 'block';

显然,如果没有这个选项,IE只会将其打印为实际文本,而不是填充select对象。

IE对“select”标记有问题。您不能只替换内部的“option”标记,还必须替换开头和结尾的“select”标记。

您是否验证了getTime.php?传递的值不是未定义的吗?是的,我忘了写,它确实可能返回一些东西,但它只是空白。所以,在用户单击send之前,选择标记下面是时间,现在只有空的选择标记。但是getTime.php不会有什么问题,因为那样它在FF、Opera和Chrome中也不会工作。是的,但IE的所有版本/场景都不支持“innerHTML”等元素。我在第一篇文章中添加了getTime.php。如果innerHTML不受支持,那么我可以使用什么呢?谢谢,如果你说它在Firefox中工作,我认为这不是你的问题。当您通过id“time”获取元素时,这是一个变量吗?如果不是,则应在引号中。id为的元素是否包含在“时间”文本框中?
echo '<select id="Time1" name="Time1">';
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<option>" .$row[0]."</option>";
}
echo '</select>';
document.getElementById('box').style.display = 'block';