【问题标题】:Returning PHP Multi-Dimension Array to Javascript/AJAX将 PHP 多维数组返回到 Javascript/AJAX
【发布时间】:2010-06-07 01:29:56
【问题描述】:

我的理解是,为了将复杂的 PHP 变量返回给 Javascript,应该通过 AJAX 和 json_encode 来完成。有人可以给我一个实际的例子(PHP和Javascript代码)吗?假设我们在 PHP 中有二维数组:

$twoDArr = array( array('Greg', 44, 'Owner'),
                  array('Joe', 23, 'Renter'),
                  array('Susan', 39, 'Owner'),
                  array('John', 32, 'Renter)
                );

我们如何使用 json_encode 将其返回到 javascript 中的类似二维数组?

【问题讨论】:

  • 呃...你的意思是除了打电话给json_encode()JSON.parse()吗?
  • 呃,我不知道。我对所有这些东西的经验非常有限。这就是为什么我想看一些例子。如果您知道一些简单的示例,请随时发布。

标签: php javascript ajax json


【解决方案1】:
<?php

$twoDArr = array( array('Greg', 44, 'Owner'),
                  array('Joe', 23, 'Renter'),
                  array('Susan', 39, 'Owner'),
                  array('John', 32, 'Renter)
                );
?>

<script>
twoDArr = JSON.parse(<?=json_encode($twoDArr)?>)
alert(twoDArr[0][0]) //alerts 'Greg'
alert(twoDArr[0][1]) //alerts '44'
alert(twoDArr[1][0]) //alerts 'Joe'
</script>

【讨论】:

  • 虽然这个例子确实有效,但当存在简单的替代方案时,通常最好避免使用 eval。在这种情况下,您可以将 eval 语句替换为 JSON.parse(=json_encode($twoDArr)?>) 以达到相同的效果。
  • 抱歉这么迟钝...你有 "JSON.parse(=json_encode($twoDArr)?>)" 什么是 "?=" 是某种速记吗?我在我的示例页面中尝试了这个,但没有任何结果。
  • 发生了一些奇怪的事情......如果我回显 json_encode($twoDArr) 我得到:[["Greg",44,"Owner"],["Joe",23,"Renter" ],["Susan",39,"Owner"],["John",32,"Renter"]] 不对吧?数组应该用“:”分隔吗?
  • 好的,我找到了问题所在。我不知道为什么,但是 php 变量必须使用 JSON_ENCODE 进行双重编码。所以 JSON.parse 行应该是: var twoDArr=JSON.parse();
【解决方案2】:

您的程序会以更简单的方式运行,如下所示:

        <?php

            $twoDArr = array( array('Greg', 44, 'Owner'),
                              array('Joe', 23, 'Renter'),
                              array('Susan', 39, 'Owner'),
                              array('John', 32, 'Renter)
                            );
        ?>

        <script>
            var twoDArr = <?php echo json_encode($twoDArr); ?>;
            alert(twoDArr[0][0]) //alerts 'Greg'
            alert(twoDArr[0][1]) //alerts '44'
            alert(twoDArr[1][0]) //alerts 'Joe'
        </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多