Я пытаюсь создать раскрывающийся список, используя jQuery, PHP и mySQL, вот мой код,
HTML:
<select id="box"></select><br /> <input id="button" type="button" value="populate" />
Javascript / JQuery:
$(document).ready(function() { $("#button").click(function (){ $.getJSON("test_post.php", function(data){ $.each(data, function(user) { $('#box').append( $('<option></option>').html(user) ); }); }); }); });
PHP:
mysql_connect('localhost', 'user', '1234'); mysql_select_db('json'); $test = mysql_query('SELECT user,pass FROM login WHERE user="john"'); while($row = mysql_fetch_array($test, true)) { $data .= json_encode($row); }; echo $data;
У меня есть 3 записи в базе данных, и когда я запускаю файл test_post.php, он отгоняет JSON, но когда я пытаюсь его заполнить, ничего не происходит!
Любая идея почему?
В вашем коде есть несколько проблем.
Во-первых: попытайтесь использовать неопределенные переменные $data , вы должны были инициализировать его до пустой строки перед циклом while: $data = ''; , в противном случае это может отправить уведомление PHP с ответом JSON в зависимости от значений параметров display_errors и error_reporting .
Второй: как сказал @shamittomar, $data должен быть массивом, а json_encode() нужно вызывать только один раз для всего массива. Пока вы отправляете несколько объектов JSON, конкатенированных в одну строку, что неверно.
В-третьих: значение параметра user функции в JavaScript на самом деле является индексом массива data , а не значением , но даже если бы user был значением, это был бы объект JavaScript с свойствами user и pass , а не строка .
Результирующий код должен быть (только с измененными частями):
PHP
$data = array(); while ($row = mysql_fetch_array($test, true)) { $data[] = $row; }; echo json_encode($data);
JavaScript
$.each(data, function(i, user) { $('#box').append( $('<option></option>').html(user.user) ); });
Попробуйте взять json_encode из цикла while и закодировать его в конце. Как это:
while($row = mysql_fetch_array($test, true)) { $data[] = $row; } $data = json_encode($data); echo $data;
[EDIT]: После комментария к OP:
Если вы просто хотите, чтобы имя пользователя выпадало, сделайте следующее:
while($row = mysql_fetch_assoc($test)) { $data[$row['user']] = $row; } $data = json_encode($data); echo $data;
Вы пробовали проверить JSON? jQuery довольно разборчив в отношении JSON: он должен правильно проверять, без комментариев и правильного типа контента! Попробуйте добавить на свой PHP следующее, чтобы узнать, помогает ли это (я всегда это делаю)
header('Content-type: application/json');
Прежде всего проверить код подключения mysql в порядке?
mysql_connect('localhost', 'user', '1234');
Обновленный php-код, как показано ниже,
mysql_connect('localhost', 'user', '1234'); mysql_select_db('json'); $test = mysql_query('SELECT user,pass FROM login WHERE user="john"'); while($row = mysql_fetch_array($test, true)) { $data['pass '] = $row['pass']; $data['user'] = $row['user']; }; echo json_encode($data); die();
Код Javascript:
$("#button").click(function (){ $.getJSON('getDropdownData.php', '',function(data){ $("#box").remove(); $('<option />', {value: '', text: 'Select option'}).appendTo("#box"); $.each(data,function(key, value){ $('<option />', {value: key, text: value}).appendTo("#box"); }); }); });
Затем вы получите dorpdown с пропуском как «значение параметра» и пользователь как «текст опции».