Я пытаюсь создать раскрывающийся список с помощью 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, но когда я пытаюсь его заполнить, ничего не происходит!
Любая идея, почему?
В коде есть несколько проблем.
Сначала: пытаемся использовать переменную undefined $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;
Прежде всего проверьте код подключения 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 с пропуском как "значение параметра" и пользователь как "текст опции".
Вы пробовали проверить JSON? jQuery довольно разборчив в этом JSON: он должен правильно проверять, без комментариев и правильного типа контента! Попробуйте добавить на свой PHP следующее: помогите (я всегда это делаю)
header('Content-type: application/json');