Nicholas Moore
Nicholas Moore

Reputation: 172

Putting mySQL Database Information into a JavaScript Array

What I'm trying to do is create a slideshow by grabbing database information and putting it into a javascript array. I am currently using the jquery ajax function to call information from a separate php file. Here is my php code:

mysql_connect('x', 'x', 'x') or die('Not Connecting');
mysql_select_db('x') or die ('No Database Selected');

$i = 0;
$sql = mysql_query("SELECT comicname FROM comics ORDER BY upldate ASC");

while($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
echo "comics[" .$i. "]='comics/" .$row['comicname']. "';";
$i++;
}

What I want is to create the array in php from the mysql query and then be able to reference it with javascript in order to build a simple slideshow script. Please let me know if you have any questions or suggestions.

Upvotes: 1

Views: 1595

Answers (3)

Quassnoi
Quassnoi

Reputation: 425251

You may want to fetch all rows into a large array and then encode it as a JSON:

$ret = array();
while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
        $ret[] = $row
echo json_encode($ret);

Then, on the client side, call something like this:

function mycallback(data)
{
        console.log(data[0].comicname); // outputs the first returned comicname
}

$.ajax
        (
        {
        url: 'myscript.php',
        dataType: 'json',
        success: mycallback
        }
        );

Upon successful request completion, mycallback will be called and passed an array of maps, each map representing a record from your resultset.

Upvotes: 3

Thierry Blais
Thierry Blais

Reputation: 2858

Ok have your .php echo json_encode('name of your php array');

Then on the javascript side your ajax should look something like this:

$.ajax({
        data:       "query string to send to your php file if you need it",
        url:        "youphpfile.php",
        datatype:   "json",
        success:    function(data, textStatus, xhr) {
                        data = JSON.parse(xhr.responseText);
                        for (i=0; i<data.length; i++) {
                        alert(data[i]); //this should tell you if your pulling the right information in

                        }
        });

maybe replace data.length by 3 or something if you have alot of data...if your getting the right data use a yourJSArray.push(data[i]); I'm sure there's a more direct way actually...

Upvotes: 3

machineghost
machineghost

Reputation: 35730

It's a little hard to tell from your question, but it sounds like:

  1. You are making an AJAX call to your server in JS
  2. Your server (using PHP) responds with the results
  3. When the results come back jQuery invokes the callback you passed to it ...
  4. And you're lost at this point? ie. the point of putting those AJAX results in to an array so that your slideshow can use them?

If so, the solution is very simple: inside your AJAX callback, put the results in to a global variable (eg. window.myResults = resultsFromAjax;) and then reference that variable when you want to start the slideshow.

However, since timing will probably be an issue, what might make more sense is to actually start your slideshow from within your callback instead. As an added bonus, that approach doesn't require a global variable.

If this isn't where you are stuck, please post more info.

Upvotes: 2

Related Questions