Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Firefox&;歌剧,但不是在IE8中_Php_Javascript_Html_Ajax - Fatal编程技术网

Php 在Firefox&;歌剧,但不是在IE8中

Php 在Firefox&;歌剧,但不是在IE8中,php,javascript,html,ajax,Php,Javascript,Html,Ajax,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/Summa

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>
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>
我感谢在这件事上的任何帮助

我的背景:
让大家知道,我是PHP、Ajax和javascript的完全新手,我自己学习,不需要上课。我的背景是Linux,Windows,C++,java,VB,VBA,MS XML,以及一些HTML。p> 尽量不要使用
innerHTML
。IE历来不允许您在任何您认为可能的地方
innerHTML
。相反,请尝试更慢、更笨重的DOM方法
.appendChild()
。 例如,让PHP返回JSON或XML以及所需的值/文本对,然后在AJAX中执行以下操作:

<select name="entry_7_single" id="entry_7" onChange="Ajax_PhpResultsWithVar('./secure/db/SummaryCls.php','entry_8','dateval',this.value)"></select>
PHP输出(也称为您的
http.responseText
):

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);
        }
    }
}
http.onreadystatechange=function(){
如果(http.readyState==4){
eval(“var数据=[”+http.responseText+“]”);

对于(var i=0;我可以显示javascript函数Ajax_PhpResultsWithVar()和AjaxPHPResults()的代码吗请?您能向我们展示一下您的ajax功能吗?在上面的示例中,选项上的value属性是多余的。value将默认为option标记的内容。请注意,您可以通过使用流行的javascript框架(例如jQuery、Prototype、Dojo等)来解决这些跨浏览器问题。我使用过jQuery,您可以直接评估HTML代码,以兼容的方式创建类似的内容,例如,如果您可以执行$('#target')。append('hello');我还应该注意,jQuery还使ajax内容非常简单;请参阅jQuery load()函数(),它将以跨浏览器兼容的方式完全满足您的需要。您(Tau)提供的代码在两种浏览器(Firefox和IE8)中都运行良好(我需要添加一个开放的括号来括住“for”循环)。Anatak(来自日本)向我介绍stackoverflow.com.谢谢你们两位。@Ai Pragma:哎呀!当我未经测试就打字时,有时会忘记花括号。--;别忘了选择正确的答案!我喜欢声誉积分,但我很高兴你有一个解决问题的好办法。
<?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();
?>

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); 
}
{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"}
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);
        }
    }
}