0

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.

5
  • Is there any message displayed in your browser console? Commented May 8, 2014 at 8:36
  • Use console.log for debugging. It is much more helpful. Try doing console.log(array); right after you assign to array, and check the browser's console (hit F12 in Chrome). You can also inspect the source code and see if there were any (uncaught) errors thrown by your script. Commented May 8, 2014 at 8:46
  • Okay, I've looked in Chrome and Firefox and this came up in Firefox: The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol. Commented May 8, 2014 at 8:56
  • so that would mean I have to set the encoding in the html tag and maybe that's the hold up? Commented May 8, 2014 at 8:57
  • -1 Found over 1'700 results on SO with 'passing PHP arrays to javascript with JSON' Commented May 8, 2014 at 10:55

1 Answer 1

2

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>
Sign up to request clarification or add additional context in comments.

7 Comments

I shouldn't need to download packages or anything should I?
There is no need to do JSON parse. The browser will do that automaticly when its loading te page.
@hoos93 I fixed the code and explained why i fixed what parst in my answer.
@daanTrancebuzz okay the new code you wrote makes sense, but for some reason it's still not working. I had thought it could be because my array contains floats but then I tried it with just the code your have and it was still a no go.
is it possible I need to set an encoding type in the html tag?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.