3

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

4
  • 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. Commented Mar 16, 2012 at 16:16
  • You must fetch results from $result before you can json_encode() it. Commented Mar 16, 2012 at 16:17
  • 2
    You should take ten minutes to learn PDO because your variable $q is inserted into your SQL without being escaped. Commented Mar 16, 2012 at 19:36
  • Thanks guys. I have now used some PDO and looked a bit more into php Commented Mar 17, 2012 at 10:21

3 Answers 3

3

You should look into JSON if you really got complicated objects

2

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>
2
  • 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 Commented Mar 17, 2012 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'}] Commented Mar 17, 2012 at 18:38
1
<script>
var foo = <?php echo json_encode($arr); ?>;
</script>

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.