doudi8519 2014-05-08 08:31 采纳率: 100%
浏览 53
已采纳

使用JSON将PHP数组传递给javascript

Okay so I know this has been asked before and I've tried the solutions, but for some reason they don't work for me so I'm asking for some help. I haven't used JSON yet so maybe it's something silly but I have no clue...

Here's the code:

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

So what do you guys think? Am I missing something? Is it possible that the array was successfully passed to javascript but for some reason won't show?

Thanks,

-Alex

EDIT:

So I'm getting a series of arrays from a text file. I use these arrays as strings to display on the page and then convert them to float arrays. When I echo one of the float arrays such as $Z_Ausmass with:

echo json_encode($Z_Ausmass);

I get [25.39999961853,121.48651123047]. However, when I use the following to display the array through 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);
    }
};

it does not work. It's vital I get the float arrays in the script because the script needs to make calculations based on them and then display the calculations to the user.

  • 写回答

1条回答 默认 最新

  • dongshi9526 2014-05-08 08:37
    关注

    When i execute the code it works ok.

    The first attempt fails because you can't append the complete array. You need to append each element in the array seperately.

    The second attempt works correctly. You only need to remove the first attempt to make it work because the first attempt stops the execution of the javascript.

    edit

    I tried to fix the code for you. I used a simple array with only text. The element you wanted to show in did not have the id you where referencing to

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

    to loop trough the complete array you do not want to hard code the max # of elements use arr.length as max for the 'for'-loop.

    You can't directly append raw text to an html element. You need to make a TextNode of it and then append that node to the html element.

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

    So The working code will be something like this:

    <?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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下: