从Javascript函数访问PHP数组元素

时间:2015-10-22 22:22:36

标签: javascript php html arrays

我正在尝试使用数组值设置表单的某些字段。

我有一个这样的数组:

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

数组中充满了Web服务的响应,我向表单发送了一些参数。一旦我填充了数组,我就绘制一个表并迭代数组。

<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,这一列填充了一个超链接,调用一个javascript函数,并将特定行的elementID值作为参数。

我的脚本还有一点:

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

这意味着,由于某种原因,字符串不会连接,如果我删除了&#39; p&#39;来自equis var中的php标签,如下所示:

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

然后警报显示:

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

因此,当它没有php标签时它会起作用。

5 个答案:

答案 0 :(得分:1)

另一个答案是正确的,但根本没有解释(甚至是礼貌地)。 PHP的东西在你的Javascript之前运行。不幸的是,你永远不会以这种方式工作。如果是相反的方式,它可能会起作用,但这不会像你拥有的那样起作用。

使这样的工作的唯一方法是提前选择ID值并在PHP中设置PHP。 Javascript永远无法设置PHP值,只需通过PHP运行之前到正在投放的页面,并且页面投放后运行

答案 1 :(得分:0)

dude ... javascript在客户端(浏览器)和服务器上的php上执行;你不能这样做

答案 2 :(得分:0)

尝试使用<xsl:variable name='NumPass' select='count(MyClass/MyContainer/MyObject/Pass[normalize-space(text())="true"])' /> 代替<? ?>

答案 3 :(得分:0)

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

由于您在生成页面时已经在php中拥有“IncidentID”,因此您只需将其写入页面即可。

而不是

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

DO

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

答案 4 :(得分:0)

您可以使用data属性将$ id传递给js,始终使用DOM。

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

然后在“查看详细信息”中使用单击事件从元素获取数据并触发该功能,这样您就可以使用它了