1

我在 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 中的时间填充选择标记。

编辑:我将从 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);
?>

EDIT2:好的,我已经添加了包装,根据这个。现在我还将发布代码选择标签,现在已包装:

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

如您所见,我只在 while 语句之前和之后添加了 echo '....'。猜猜现在会发生什么。在 FF、Opera 和 Chrome 中它可以正常工作,但在 IE9 中,它现在获取值,但它不会将它们放在下拉菜单中,它只是将它们打印为实际文本。当值打印为文本时,下拉菜单也消失了。似乎它不想包含选择标签。我不明白,为什么只有IE?

4

2 回答 2

0

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

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

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

于 2011-04-26T08:15:40.513 回答
0

IE 的“选择”标签有问题。您不能只替换内部的“选项”标签,还必须替换开始和结束的“选择”标签。

于 2011-11-01T14:59:03.950 回答