[英]AJAX problem with IE9 (and other IE versions)
尽管尚未在IE7中进行测试,但我在IE9,IE8和可能的IE7中都遇到了XMLHttpRequest对象的问题。 它可以在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);
?>
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?
我在这里找到了正确的解决方案。 我已经在div框中添加了select标记,缺少的代码就是这一部分:
document.getElementById('box').style.display = 'block';
显然,没有此功能,IE只会将其打印为实际文本,而不是填充选择对象。
IE的“选择”标签有问题。 您不能只替换内部的'option'标签,还必须替换开始和结束的'select'标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.