2

I'm trying to understand how my PHP script can pass an array to my JavaScript code. Using the following PHP, I pass an array:

$c = array(3,2,7);

echo json_encode($c);

My JavaScript is as follows:

    $.post("getLatLong.php", { latitude: 500000},
        function(data) {
            arrayData = data
            document.write(arrayData)
            document.write(arrayData[0]);
            document.write(arrayData[0]);
            document.write(arrayData[0]);
        });
</script>

What is printed out on the screen is

[3,2,7][3,

I'm trying to understand how json_encode works - I thought I would be able to pass the array to a variable, and then access it like a normal JavaScript array, but it views my array as one large text string. How do ensure that it reads it like an array?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
djq
  • 14,810
  • 45
  • 122
  • 157
  • Your example is a 2-dimensional array. Try using `data[0][0]`, `[0][1]`,`[0][2]`, etc. to access `3`,`2`,`7` respectively. – Brad Christie Jan 15 '11 at 20:27
  • hmm, I understand now that it is a 2D array. but even if I change it, it still reads it as a string. – djq Jan 15 '11 at 20:29
  • @Brad Christie: It is not at all a 2-dimensional array. What makes you think that? – Felix Kling Jan 15 '11 at 20:41
  • @Felix: Look a their revision history. Their first code implemented (what's being referred to as `$c`) as `array(array(3,2,7))`. But, I take full accountability for missing that they didn't specify they wanted JSON parsed (though I can't confirm if they included a `header()` in the AJAX page specifying JSON that `.post` wouldn't take care of it automatically) – Brad Christie Jan 15 '11 at 20:44
  • @Brad Christie: Oh I see. Nevermind then :) – Felix Kling Jan 15 '11 at 20:45

1 Answers1

4

Pass the dataType argument to $.post:

$.post("getLatLong.php", { latitude: 500000},
   function(data){         
   // ...
}, 'json');

Then data will be properly decoded.

Alternatively you can also use $.parseJSON in the callback.

Explanation of JSON:

JSON is a data exchange format. It specifies the structure of the data string that is transmitted. json_encode takes a PHP data structure like an array or an object and transformes it to JSON, i.e. a string with a certain format.

json_encode($c) will give you the string "[3,2,7]".

On the client site, you receive that string, but you have to decode it in to proper JavaScript data structures. So $.parseJSON(data) will give you a JavaScript array with 3 elements (or if you pass 'json' as third parameter to .post(), jQuery is doing the decoding automatically for you).

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143