1) Эта проблема касается только одной html-страницы, давайте назовем ее «ajax.html».
2) У меня есть функции AJAX на этой веб-странице, которые работают как в Firefox, так и в IE8.
3) Теперь я пытаюсь сгенерировать только значения параметров раскрывающегося списка дат, используя мои функции ajax, и это работает в Firefox & Opera, но не в IE8.
4) Внешний HTML-код для выпадающего списка выглядитнапример:
<select name="entry_7_single" id="entry_7" onChange="Ajax_PhpResultsWithVar('./secure/db/SummaryCls.php','entry_8','dateval',this.value)"></select>
Вызов onchange относится к функции ajax, которая успешно (и Firefox, и IE8) заполняет текстовую область (entry_8) описанием события, связанного с датой, выбранной в этом раскрывающемся списке.
5) Вызов onload инициирует функцию ajax для генерации значений раскрывающегося списка:
<body class="ss-base-body" onLoad="OnLoadWebPage()">
6) Сценарий js, который вызывает функцию ajax, выглядит следующим образом:
function OnLoadWebPage()
{
Ajax_PhpResults('./secure/db/GenDateListCls.php','entry_7');
}
7) Поскольку он работает в Firefox, но не в IE8, я выбрасываю вывод функции ajax в большое текстовое поле Firefox и получаю следующее:
<option selected value="8 JUN 2010">8 JUN 2010</option>
<option value="9 JUN 2010">9 JUN 2010</option>
<option value="10 JUN 2010">10 JUN 2010</option>
<option value="11 JUN 2010">11 JUN 2010</option>
8) Есть болеесотен, но вы получите суть того, что генерирует функция ajax.Далее я перечислю функцию PHP, которая выводит вышеуказанные выпадающие значения:
<?php
include_once 'SPSQLite.class.php';
include_once 'misc_funcs.php';
class GenDateListCls
{
var $dbName;
var $sqlite;
function GenDateListCls()
{
$this->dbName = 'accrsc.db';
$this->ConstructEventDates();
}
function ConstructEventDates()
{
$this->sqlite = new SPSQLite($this->dbName);
$todayarr = getdate();
$today = $todayarr[mday] . " " . substr($todayarr[month],0,3) . " " . $todayarr[year];
$ICalDate = ChangeToICalDate($today);
$dateQuery = "SELECT dtstart from events where substr(dtstart,1,8) >= '" . $ICalDate . "';";
$this->sqlite->query($dateQuery);
$datesResult = $this->sqlite->returnRows();
foreach (array_reverse($datesResult) as $indx => $row)
{
$normDate = NormalizeICalDate(substr($row[dtstart],0,8));
if ($indx==0)
{
?>
<option selected value=<?php echo('"' . $normDate . '"'); ?>><?php echo $normDate; ?></option>
<?php
}
else
{
?>
<option value=<?php echo('"' . $normDate . '"'); ?>><?php echo $normDate; ?></option>
<?php
}
}
$this->sqlite->close();
}
}
$dateList = new GenDateListCls();
?>
9) Вот функции ajax, которые я создал и использовал (конечно, некоторые части изменены из примеров вне Интернета):
function Ajax_XMLHttpRequest_Factory()
{
var ajxRequest;
try
{
// Opera 8.0+, Firefox, Safari
ajxRequest = new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer Browsers
try
{
ajxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
// Something went wrong
alert("Unable to create an XMLHttpRequest with this current browser.");
return false;
}
}
}
return ajxRequest;
}
function Ajax_PhpResults(fname,elementID){
var ajaxRequest = Ajax_XMLHttpRequest_Factory();
// Create a callback function that will receive data sent from the server
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById(elementID);
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", fname, true);
ajaxRequest.send();
}
function Ajax_PhpResultsWithVar(fname,elementID,varpassed,value){
var ajaxRequest = Ajax_XMLHttpRequest_Factory();
// Create a callback function that will receive data sent from the server
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById(elementID);
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", fname+"?"+varpassed+"="+value, true);
ajaxRequest.send();
}
function Ajax_RunPhpOnly(fname){
var ajaxRequest = Ajax_XMLHttpRequest_Factory();
ajaxRequest.open("GET", fname, true);
ajaxRequest.send(null);
}
Я признателен за любую помощь в этом вопросе.
Моя справочная информация: Чтобы вы все знали, я полный новичок вPHP, Ajax и Javascript, и учить все это самостоятельно, никаких классов.Мой опыт работы в Linux, Windows, C ++, Java, VB, VBA, MS XML и некоторых HTML.