使用JSON将PHP数组传递给javascript

时间:2014-05-08 08:31:18

标签: javascript php arrays json

好的所以我知道之前已经问过这个问题并且我已经尝试了解决方案,但由于某些原因它们不适合我,所以我要求一些帮助。我还没有使用JSON,所以也许这是愚蠢的事情,但我没有任何线索...

以下是代码:

<?php
    $array;

    #successful attempt to display array with json_encode in php
    echo json_encode($array);
?>
<html>
<input id="show" type="button" onclick="showArray()" value="showArray">
<divShow>
</divShow>
<script>
function showArray(){
var array = <?php echo json_encode($array); ?>;

    //Failed attempt to display array in the div field show
    document.getElementById("divShow").appendChild(array);

    //Failed attempt to display the array with an alert.
    for(var i=0; i<2; i++){
        alert(array[i]);
    }
};
</script>
</html>

那你们觉得怎么样?我错过了什么吗?是否有可能将数组成功传递给javascript但由于某种原因不会显示?

谢谢,

-Alex

编辑:

所以我从文本文件中获取了一系列数组。我使用这些数组作为字符串在页面上显示,然后将它们转换为浮点数组。当我使用:

回显其中一个浮动数组,例如$ Z_Ausmass
echo json_encode($Z_Ausmass);

我得到[25.39999961853,121.48651123047]。但是,当我使用以下内容通过javascript显示数组时:

function calc(){
var Z_Ausmass = <?php echo json_encode($Z_Ausmass); ?>;
    for(var o=0; o<Z_Ausmass.length; o++){
    var textnode = document.createTextNode(Z_Ausmass[o]);
    document.getElementById("divCalc").appendChild(textnode);
    }
};

它不起作用。在脚本中获取浮点数组至关重要,因为脚本需要根据它们进行计算,然后将计算结果显示给用户。

1 个答案:

答案 0 :(得分:2)

当我执行代码时,它可以正常工作。

第一次尝试失败,因为您无法附加完整的数组。你需要单独追加数组中的每个元素。

第二次尝试正常。您只需删除第一次尝试使其工作,因为第一次尝试停止执行javascript。

修改

我试着为你修复代码。我使用了一个只有文本的简单数组。 您想要显示的元素没有引用

的ID
<divShow></divShow>//wrong
<div id="divShow"></div>//right

循环通过完整的数组你不想硬编码最大元素数量使用arr.length作为'for'-loop的最大值。

您无法直接将原始文本附加到html元素。您需要为其创建TextNode,然后将该节点附加到html元素。

var textnode=document.createTextNode(arr[i]);
document.getElementById("divShow").appendChild(textnode);

所以工作代码将是这样的:

<?php
$array = array("test","text","show");

#successful attempt to display array with json_encode in php
echo json_encode($array);
?>
<html>
<input id="show" type="button" onclick="showArray()" value="showArray">
<div id="divShow">
</div>
<script>
    function showArray(){
        var arr = <?php echo json_encode($array); ?>;

        //Put the text in a text node, append to the div
        for(var i=0; i< arr.length; i++){
            var textnode=document.createTextNode(arr[i]);
            document.getElementById("divShow").appendChild(textnode);
        }
    };
</script>
</html>