Join the Stack Overflow Community
Stack Overflow is a community of 6.8 million programmers, just like you, helping each other.
Join them; it only takes a minute:
Sign up

So I want to send a PHP array to jQuery but it's not working and I don't know why. Can someone help me out?

Here is the PHP:

$var1 = "hello";
$var2 = "world";
$values = array('value1'=>$var1,'value2'=>$var2);
echo (json_encode($values));

And the jQuery:

$.get("test.php", function(values){
var jsonValues = $.parseJSON(values);
$("showValue1").html(jsonValues.value1);
});
share|improve this question
    
Are you sure that you don't get any error from your php script or javascript? – marian0 Jun 9 '15 at 16:57
    
why are you not using .getJSON() it eliminates your parsing step. api.jquery.com/jquery.getjson – cmorrissey Jun 9 '15 at 17:00
    
Maybe use the dev-tools of your browser to inspect the requests and what's actually going on? – Jörn Hees Jun 9 '15 at 17:06
    
I have tried all suggestions but no luck. With some of the suggestions I am getting SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data – user4958875 Jun 9 '15 at 19:19
    
Please look at my answer and remove what success method has inside and just write console.log(data, typeof data); and post what you get here. Also in php update echo json_encode($values); exit(); - remove brackets for echo and add exit – stefanz Jun 9 '15 at 22:02

I tested your php code and it checks out. I think you actually have some syntax errors with your JQuery code.

$("showValue1").html(jsonValues.value1);

most likely should have been one of

$("#showValue1")[0].html(jsonValues.value1);
$(".showValue1")[0].html(jsonValues.value1);

JQuery uses # and . to indicate an element's id and it's class repectively. the [0] is because it returns an array of every element that matches on the page and I assume you only want to match the first one, maybe not though. Check out this overview of jquery selectors: http://www.w3schools.com/jquery/jquery_ref_selectors.asp

share|improve this answer
    
Still not working when using # or . And [0] is not making any difference either. – user4958875 Jun 9 '15 at 19:21
    
Can you edit your post with these logs? And an output of console.log(values) – nchinda2 Jun 9 '15 at 19:31

I think you didn't include the index of the json object. Try to used this :

$.get("test.php", function(values){
var jsonValues = $.parseJSON(values);
$("showValue1").html(jsonValues[0].value1);
});

Update this answer as of 06/10/2015 09:42AM GMT+8.

If this code also has an error, return the code to this jsonValues.value1. I think this will be the solution. You haven't an error parsing the JSON. I think your error is on this part $("showValue1"). JQuery doesn't know what element is that. You can try this if your container is an ID : $("#showValue1") and else if it is class $(".showValue1")

For example your element is:

<div id="showValue1"></div>

Then your jquery is :

$.get("test.php", function(values){
    var jsonValues = $.parseJSON(values);
    $("#showValue1").html(jsonValues.value1);
});
share|improve this answer
    
He didn't use a json array, just a dictionary. The php array gets covered into a dictionary. At least that's what happened when I ran his code. – nchinda2 Jun 9 '15 at 17:22
    
Still not working but am getting SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data – user4958875 Jun 9 '15 at 19:23
    
Please see my updates. I hope it will help now. – Aaron Hernandez Jun 10 '15 at 1:58

You also can try doing stuff like :

$.ajax({
    url : 'test.php',
    method : 'GET',
    dataType : 'json',
    success : function( data ){
        var data = JSON.parse( data );
        $('#showValue1').html( data.value1 );
    }
});

Get more documentation here, it should not be a hard task. Just make sure your path to test.php is the right one and also is a good practice to exit() your php file

share|improve this answer
up vote 0 down vote accepted

I figured it out on my own! It's probably not the best way (I am just a beginner in this stuff) but it works.

So I was trying to put the data from my database into an array. The code in my original post was just a sample version because I wanted to try the code first.

This is what I came up with. The PHP:

$array = array();

while($row = mysql_fetch_assoc($rs)){     //$rs is mySQL query
    $array[] = $row;
}

echo $array[0]['post']. '&';       //post is the column name from my database
echo $array[1]['post']. '&';
echo $array[2]['post'];

With Ajax I did this (thanks to stefanz!):

 $.ajax({
    method:    'GET',
    url:       'test.php',
    cache:     false,
    success:   function(data){
       var tmp = data.split("&");
       $('#showValue1').html(tmp[0]);
       $('#showValue2').html(tmp[1]);
       $('#showValue3').html(tmp[2]);
    }
});

Thanks everybody for helping me out! It lead me to the code I am using now.

share|improve this answer
    
Ok, glad that all of us could help you, but what you did there is a totally begginer way ( don't say it s wrong since it works ). It s up to you if you want to go with this solution or you want to improve your skills. – stefanz Jun 10 '15 at 17:51
    
I definitely want to improve my skills, so any suggestions on how to do this thing the right way are welcome. But it worked for now and I had to fix this quickly but it's always good to know the right way ofcourse. And maybe it helps someone else out with the same problem. – user4958875 Jun 12 '15 at 8:01

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.