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

| 我尚未在IE9,IE8和可能的IE7中使用XMLHttpRequest对象,尽管尚未在IE7中进行测试。它可以在FF4,Opera 11.01和Chrome 10中正常工作。 首先,我想解释一下我如何使用此代码。我有一个HTML选择标签,其中定义了时间。然后,当用户单击按钮时,它会使用数据库中的时间值动态更新选择。现在,这里是用于创建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,并将响应写回到id = time的select标签。现在,在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);
?>
编辑2: 好的,据此我添加了包裹。现在,我还将发布代码选择标签,该标签现已包装:
<div id=\"wrap\">
        <select id=\"Time1\" name=\"Time1\" disabled=\"disabled\">
            <?php if (empty($_GET[\'Time1\'])) { echo \"<option>Ura</option>\"; } else { echo \'<option>\' . $_GET[\'Time1\'] . \'<option>\'; } ?>
        </select>
    </div>
getTime.php中的代码现在也已更改,我将仅发布已更改的部分:
echo \'<select id=\"Time1\" name=\"Time1\">\';
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo \"<option>\" .$row[0].\"</option>\";
}
echo \'</select>\';
如您所见,我只在陈述之前和之后添加了echo'.... \'。猜猜现在会发生什么。在FF,Opera和Chrome中,它可以正常工作,但是在IE9中,它现在可以获取值,但不会将其放在下拉菜单中,而只是将其打印为实际文本。同样,当将值打印为文本时,下拉菜单也无效。似乎它不想包含选择标记。我不明白,为什么只有IE可以呢?     
已邀请:
我在这里找到了正确的解决方案。我已经在div框中添加了select标记,缺少的代码就是这一部分:
document.getElementById(\'box\').style.display = \'block\';
显然,没有此功能,IE只会将其打印为实际文本,而不是填充选择对象。     
IE的\'select \'标记有问题。您不能只替换内部的\'option \'标记,还必须替换开始和结束的\'select \'标记。     

要回复问题请先登录注册