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

I did a search but I am still confused as I am really new to php and ajax, so I was hoping someone can help me.

Im am using a php script within some ajax to access a database. I can echo the data to replace an element on the webpage. However I want to receive the data as an array to manipulate again in javaScript.

Here is the php

<?php $q=$_GET["q"];

$con = mysql_connect('server', 'name', 'pass'); if (!$con) //don't connect {    die('Could not connect: ' . mysql_error()); //give error }

mysql_select_db("database", $con); //select the MySQL database

$sql="SELECT * FROM table WHERE field = '".$q."'";

$result = mysql_query($sql); //$result is an array

$response = $result;

echo json_encode($response); 

echo "<table border='1'>
<tr>
<th>Heading1</th>
<th>Heading2</th>
<th>Heading3</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['field1'] . "</td>";
  echo "<td>" . $row['field2'] . "</td>";
  echo "<td>" . $row['field3'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);

?>

and he is the ajax/jScript used to call the php script.

function func(var)
{
xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) //ready
        {
            document.getElementById("div2").innerHTML=xmlhttp.responseText;

        }
    }
xmlhttp.open("GET","getTest.php?q=" + var,true);
xmlhttp.send();
}

As you can see it replaces div2 with a table with the info. But how can I instead receive the data as an array in jScript?

Cheers

share|improve this question
2  
$result is NOT an array. It's a mysql result handle. You cannot json_encode that and get useable query results from it in Javascript. – Marc B Mar 16 '12 at 16:16
    
You must fetch results from $result before you can json_encode() it. – Michael Berkowski Mar 16 '12 at 16:17
2  
You should take ten minutes to learn PDO because your variable $q is inserted into your SQL without being escaped. – tadman Mar 16 '12 at 19:36
    
Thanks guys. I have now used some PDO and looked a bit more into php – myol Mar 17 '12 at 10:21
up vote 1 down vote accepted

As Marc B says, the result of an SQL query is a result handle that you need to read from in order to then JSON encode:

// run the query
$result = mysql_query("SELECT * FROM table WHERE field = '{$q}'");

// fetch all results into an array
$response = array();
while($row = mysql_fetch_assoc($result)) $response[] = $row;

// save the JSON encoded array
$jsonData = json_encode($response); 

In your script, use something like the following to merge that JSON into the JavaScript:

<script>
  var data = <?= $jsonData ?>;
  console.log(data); // or whatever you need to do with the object
</script>
share|improve this answer
    
Thanks I managed to get this far on my own, but now I am trying to receive the json_encode in javascript. If I echo I can print out the array, but I don't know how to instead send it back to my jScript – myol Mar 17 '12 at 10:23
    
I've edited the answer above to show how you would include the data into the page as part of a JavaScript tag. You can treat the JSON data as any regular object created in JavaScript like [ {field: 'value'}, {field: 'othervalue'}] – steveukx Mar 17 '12 at 18:38

You should look into JSON if you really got complicated objects

share|improve this answer
<script>
var foo = <?php echo json_encode($arr); ?>;
</script>
share|improve this answer

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.