从Javascript函数访问PHP数组元素


Access to a PHP array element from Javascript function

我想用数组的值设置表单的一些字段。

我有一个像这样的数组:

Array
    {
        'elementID1' => Array
                           {
                               'id1' => 'some value',
                               'id2' => 'some value',
                               'id3' => 'some value',
                               ...
                           }
        'elementID2' => Array
                           {
                               'id1' => 'some value',
                               'id2' => 'some value',
                               'id3' => 'some value',
                               ...
                           }
        ...
    }

数组由一个webservice的响应填充,我用表单向它发送了一些参数。填满数组后,绘制一个表并遍历数组。

<table width = "100%" border = "1">
    <tr>
        <th>Header 1</th>
        <th>Header 2</th>
        <th>Header 3</th>
        <th>View details</th>
    </tr>
    <?php
        foreach($array as $id => $detail)
        {       
            echo "<tr>";
                echo "<td>";
                    if(array_key_exists('id1', $detail))
                        echo $detail['id1'];
                echo "</td>";
                echo "<td>";
                    if(array_key_exists('id2', $detail))
                        echo $detail['id2'];
                echo "</td>";
                echo "<td>";
                    if(array_key_exists('id3', $detail))
                        echo $detail['id3'];
                echo "</td>";
                echo "<td>";
                    echo "<a href = '"javascript:equisYe('" . $id . "')'">View more</a>";
                echo "</td>";
            echo "</tr>";
        }
    ?>
</table>

现在,问题来了,正如您所看到的,有一个名为View details的第四列,该列中填充了一个超链接,该超链接以特定行的elementID值作为参数调用javascript函数。

在下面我有一个脚本:

<script>
    function equisYe(id)
    {
        var equis = "<?php echo $array['" + id + "']['IncidentID']; ?>";
        alert(equis);
    }
</script>

当我点击超链接没有发生任何事情,我认为问题与引号内的特殊字符有关。在我的浏览器中,当我检查其中一个超链接时,它在de scripts标记中显示以下消息:

function equisYe(id)
{
    var equis = "<br />
    <b>Notice</b>:  Undefined index:  + id +  in <b>
";
    alert(equis);
}

这意味着,由于某种原因,字符串没有连接,如果我从equis变量中的php标记中删除'p',像这样:

var equis = "<?ph echo $array['" + id + "']['IncidentID']; ?>";

然后警报显示如下:

"<?ph echo $array['10']['IncidentID']; ?>"

所以,当它没有php标签时,它可以工作

另一个答案是正确的,但根本没有解释(甚至没有礼貌地解释)。PHP在Javascript之前运行。不幸的是,你永远无法做到这一点。如果是另一种方式,它可能会工作,但这不会像你这样工作。

要使这种工作的唯一方法是提前选择ID值,并让PHP在Javascript中设置一些东西。Javascript永远不能仅仅因为PHP在之前运行而Javascript在之后运行而设置PHP值。

dude…Javascript在客户端(浏览器)执行,PHP在服务器端执行;你不能那样做

尝试使用<? ?>代替<?php ?>

每个人都是正确的,因为你不能简单地从Javascript调用PHP函数而不执行某种HTTP请求。

由于在生成页面时php中已经有了"IncidentID",因此可以简单地将其写入页面。

不是

echo "<td>";
echo "<a href = '"javascript:equisYe('" . $id . "')'">View more</a>";
echo "</td>";

echo "<td>";
echo "<a href = '"javascript:alert('" . $detail['IncidentID'] . "')'">View more</a>";
echo "</td>";

你可以使用data属性来传递$id给js,总是使用DOM。

检查:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes

然后在"查看详细信息"中使用单击事件要从元素中获取数据并触发函数,可以使用