使用JS变量对PHP数组进行索引(预加载):;未捕获参考错误”;即使函数不是't调用

Using JS variable to index (pre-loaded) PHP array: "Uncaught Reference Error" even when function isn't called

本文关键字:错误 参考 函数 调用 数组 PHP 变量 索引 使用 加载 JS      更新时间:2023-09-26

我对PHP和JS都很陌生,所以这里很可能缺少一些基本的东西。我知道PHP在服务器端运行,JS在客户端运行。我的目标是用PHP生成一个数组,然后让用户的按键行为控制数组中元素的显示。这两个步骤都可以单独工作,但当我试图将所有内容放在一起时,会遇到一个未捕获的引用错误。我在这里读到,未捕获引用错误通常来自语法/解析问题,但我在代码的相关部分找不到任何语法错误。

下面是一些示意代码,说明了我遇到的问题。您会注意到函数ShowNextCell()在下面被注释掉了,第20行的函数调用也是如此。这段代码按预期执行:每当按下空格键时,最上面的一行就会增加,最下面的一行显示PHP数组的内容。凉的

但现在,如果您只取消注释ShowNextCell的函数定义(函数调用仍被注释掉),您会发现一切都崩溃了:

  1. JS控制台抛出未捕获语法错误,可能是因为嵌入的PHP在这个函数中没有正确评估,尽管相同的语法在表的第3行中评估得非常好行
  2. JS控制台还抛出一个Uncaught Reference Error,这样它现在认为我的setFocus()函数是未定义的。这是怎么回事可能,因为唯一改变的是定义未使用的函数(以及在setFocus()之后出现的函数已定义
  3. 此外,即使您通过单击顶部手动设置焦点行中,keyCheck()函数似乎也未定义,如下所示任何时候发生的另一个未捕获参考错误证明键被按下

不幸的是,对于我来说,ShowNextCell()函数是这个脚本中最关键的部分,所以我不能听之任之。我一整天都在做这件事,我完全受不了了。我非常希望你们能帮助我了解这里发生了什么。谢谢

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <script>
        function keyCheck(e)
        {
           var KeyID = (window.event) ? event.keyCode : e.keyCode; 
           switch(KeyID)
           {
              case 32: //spacebar
                videocounter++; 
                document.getElementById("videocounterdisplay").innerHTML=videocounter; //this line works
                //ShowNextCell();
              break;
              }
        }
       function setFocus(){    
            document.getElementById("TopRow").focus();
        }
       /* 
       function ShowNextCell(){
            switch (videocounter)
                {
                case 1: 
                    document.getElementById("1port").innerHTML="<? echo $Stimulus[1]; ?>";
                    break;
                case 2: 
                    document.getElementById("2port").innerHTML='<? echo $Stimulus[2];?>';
                    break;
                case 3: 
                    document.getElementById("3port").innerHTML='<? echo $Stimulus[3];?>';
                    break;
                default:
                    document.getElementById("0port").innerHTML='An error has occurred';
                    break; 
           }        
        }
        */
        var videocounter = 0;
        </script>
    </head>
    <body onload="setFocus()">
        <?php
        $Stimulus = array("a","b","c","d");
        ?>    
        <table border="1">
        <tr id="TopRow" tabindex="-1" onkeydown="keyCheck()"> <!-- Desired behavior: rightmost cell should start at 1 and increment with each press of the spacebar. -->
            <td colspan="3">
                Counter is set to: 
            </td>
            <td id="videocounterdisplay">
            </td>
        </tr>
        <tr> <!-- Desired behavior: an additional cell should be filled in (from left to right) each time the spacebar is pressed.  -->
            <td id="0port">
                <? echo $Stimulus[0]; ?>
            </td>
            <td id="1port">
            </td>
            <td id="2port">
            </td>
            <td id="3port">
            </td>
        </tr>
        <tr> <!-- Desired behavior: just to illustrate that indexing the php array is not the problem. -->  
            <td>
                <? echo $Stimulus[0]; ?>
            </td>
            <td>
                <? echo $Stimulus[1]; ?>
            </td>
            <td>
                <? echo $Stimulus[2]; ?>
            </td>
            <td>
                <? echo $Stimulus[3]; ?>
            </td>
        </tr>
    </table>

    </body>
</html>

在该函数中,在定义$Stimulus数组之前,您已经有了<? echo $Stimulus[1]; ?>。将数组定义移动到文件的顶部。在尝试访问PHP:中的数组之前,必须运行以下行

    <?php
        $Stimulus = array("a","b","c","d");
    ?>