将PHP多维数组返回给Javascript/AJAX

3

我的理解是,为了将一个复杂的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中?

1
除了调用json_encode()JSON.parse()之外,您指的是其他什么? - Ignacio Vazquez-Abrams
嗯,我不知道。我的经验在这方面非常有限。这就是为什么我想看一些例子。如果你知道一些简单的例子,那就随便发一下吧。 - GregH
2个回答

2
<?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>

2
虽然这个例子确实可以工作,但通常最好避免使用eval,当有一个简单的替代方案时。在这种情况下,您可以将eval语句替换为JSON.parse(<?=json_encode($twoDArr)?>),以达到相同的效果。 - Rookwood
抱歉我表达得不够清晰...你有一个"JSON.parse(<?=json_encode($twoDArr)?>)",这个"?="是什么意思?是某种简写吗?我在我的示例页面中尝试了这个代码,但没有任何返回结果。 - GregH
有些奇怪...如果我输出json_encode($twoDArr),我得到的是:[["Greg",44,"Owner"],["Joe",23,"Renter"],["Susan",39,"Owner"],["John",32,"Renter"]] 这不对吧?数组应该用“:”分隔吗? - GregH
2
好的,我找到问题所在了。虽然我不确定原因,但是php变量必须使用JSON_ENCODE进行双重编码。因此,JSON.parse行应该写成: var twoDArr=JSON.parse(<?php echo JSON_ENCODE(JSON_ENCODE($twoDArr))?>); - GregH

0
你的程序可以像这样更简单地运行:
        <?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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接