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)填充textarea(entry_8),其中包含与此下拉列表中所选日期相关联的事件的描述。
5)onload调用启动ajax函数以生成下拉列表值:
<body class="ss-base-body" onLoad="OnLoadWebPage()">
6)调用ajax函数的js脚本如下:
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和&amp; S的完全新手。 javascript,我自己学习,没有课程。我的背景是Linux,Windows,C ++,Java,VB,VBA,MS XML和&amp;一些HTML。
答案 0 :(得分:1)
尽量不要使用innerHTML
。 IE历史上不允许你在任何你认为可能的地方innerHTML
。而是尝试更慢,更笨重的DOM方法.appendChild()
。
例如,让PHP返回带有您需要的值/文本对的JSON或XML,然后当您使用AJAX时,它会执行以下操作:
PHP输出(又名您的http.responseText
):
{value:"20100608",text:"date 1"},
{value:"20100609",text:"date 2"},
{value:"20100610",text:"date 3"},
{value:"20100611",text:"date 4"},
{value:"20100612",text:"date 5"}
JavaScript的:
http.onreadystatechange = function(){
if(http.readyState == 4){
eval("var data = [" + http.responseText + "]");
for(var i=0;i<data.length;i++)
var t = document.createElement("option");
t.value = data[i].value;
t.innerHTML = data[i].text;
document.getElementById("entry_7").appendChild(t);
}
}
}
我不确定您遇到问题的原因,但我猜它与IE中innerHTML
元素的select
有关。尝试我的上述方法,我很确定它会起作用。
我希望这会有所帮助。