2012-04-25 2 views
1

Что я пытаюсь сделать, так это создать слайд-шоу, захватив информацию базы данных и помещая ее в массив javascript. В настоящее время я использую функцию jquery ajax для вызова информации из отдельного файла php. Вот мой PHP код:Ввод данных базы данных mySQL в массив JavaScript

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++; 
} 

То, что я хочу, чтобы создать массив в PHP из запроса тузд и затем иметь возможность ссылаться на него с JavaScript для того, чтобы построить простой слайд-шоу сценарий. Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы или предложения.

+0

Вопрос: знаете ли вы, что такое аякс? Вы встречали jQuery? Вы пробовали существующий сценарий слайд-шоу в php/java/jquery/ajax и видели, как он работает? Где ты застрял, что ты не знаешь? – Konerak

+1

_Пожалуйста, дайте мне знать, если у вас есть вопросы. вы должны описать проблему, а не нас. использование трех или четырех технологий для чего-то может быть более сложным, чем 10-строчный код. – undefined

ответ

3

Ok ваш .php echo json_encode('name of your php array');

Тогда на яваскрипте стороны вашего Аякс должен выглядеть примерно так:

$.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 

         } 
     }); 

возможно заменить data.length на 3 или что-то, если у вас есть много данных. ..если вы получаете правильные данные, используйте yourJSArray.push (данные [i]); Я уверен, что есть более прямой путь на самом деле ...

+0

Если есть много результатов, этот ответ приведет к большим количеством (возможно, * * *) сигналов. Вы должны рассмотреть возможность создания консоли.log (data [i]), и используйте браузер, например Chrome или Firefox, с Firebug (оба из которых имеют консоли). – machineghost

+0

Да, это то, что я говорил с заменой data.length на 3 –

+0

Ahhh, пропустил это; вы правы, ограничение длины цикла for тоже будет работать (хотя, вообще говоря, я все еще думаю, что использование console.log - более чистая/лучшая практика, чем использование предупреждения). – machineghost

2

Это немного трудно сказать, от вашего вопроса, но это звучит как:

  1. Вы делаете вызов AJAX на сервер в JS
  2. Вашего сервера (с помощью PHP) отвечает с результатами
  3. Когда результаты вернутся, jQuery вызывает обратный вызов, который вы ему передали ...
  4. И вы потерялись в этот момент? то есть. точка ввода этих AJAX приводит к массиву, чтобы ваше слайд-шоу могло их использовать?

Если да, то решение очень простое: внутри AJAX обратного вызова, поместить результаты в глобальной переменной (например, window.myResults = resultsFromAjax;.), А затем ссылаться на эту переменную, если вы хотите, чтобы запустить слайд-шоу ,

Однако, поскольку время, вероятно, будет проблемой, что может иметь больше смысла - фактически начать слайд-шоу изнутри вашего обратного вызова. В качестве дополнительного бонуса этот подход не требует глобальной переменной.

Если это не то место, где вы застряли, напишите больше информации.

3

Вы можете извлечь все строки в большой массив, а затем закодировать его как JSON:

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

Затем на стороне клиента, назвать что-то вроде этого:

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

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

После успешного завершения запроса, mycallback будет называться и передается массив карт, каждая карта, представляющая собой запись из ваших результирующих.

+0

спасибо! Я использовал комбинацию вашего ответа и Likwid_T, чтобы исправить мою проблему. – myrmidon16

Смежные вопросы