У меня проблема с объектом XMLHttpRequest в IE9, IE8 и, возможно, IE7, хотя я не тестировал в IE7. Он работает без проблем в FF4, Opera 11.01 и Chrome 10. Сначала я хотел бы объяснить, для чего я использую этот код. У меня есть тег выбора HTML с опцией Time, определенной в нем. Затем, когда пользователь нажимает кнопку, он динамически обновляет выбор значениями времени из базы данных. Теперь вот код для создания объекта 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 не хочет заполнять тег 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>';
Как видите, я добавил эхо '....' только до и после оператора while. Угадайте, что сейчас произойдет. В FF, Opera и Chrome он работает без проблем, но в IE9 он теперь получает значения, но не помещает их в раскрывающееся меню, а просто печатает их как текст. Кроме того, выпадающее меню исчезло, когда значения печатаются в виде текста. Похоже, он не хочет включать тег select. Я не понимаю, почему это только с IE?