JQuery JSON выпадающий не заполнен - PullRequest
0 голосов
/ 31 августа 2010

Я пытаюсь создать выпадающий список, используя 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, но когда я пытаюсь получить егодля заполнения выпадающего списка ничего не происходит!

Есть идеи, почему?

Ответы [ 4 ]

3 голосов
/ 31 августа 2010

Попробуйте вывести 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;
2 голосов
/ 31 августа 2010

В вашем коде есть несколько проблем.

Первое: попытка использовать неопределенную переменную $data, вы должны были инициализировать ее пустой строкой до цикла while: $data = '';, в противном случае это может отправить уведомление PHP с ответом JSON в зависимости от значений display_errors и error_reporting настроек.

Второе: , как сказал @shamittomar, $data должен быть массивом, а json_encode() должен вызываться только один раз для всего массива. На данный момент вы отправляете несколько объектов JSON, объединенных в одну строку, что неверно.

Третье: значение параметра функции user в JavaScript на самом деле представляет собой index массива data, а не value , но даже если user будет значением, это будет объект JavaScript со свойствами user и pass, а не string .

Результирующий код должен быть (только измененные части):

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)
    );
});
0 голосов
/ 01 декабря 2014

Прежде всего проверьте правильность кода подключения 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 с пропуском как «значением параметра» и пользователем как «текстом варианта».

0 голосов
/ 31 августа 2010

Вы пытались проверить JSON? JQuery довольно требователен к JSON: он должен проверяться корректно, без комментариев и правильного типа контента! Попробуйте добавить следующее в ваш PHP, чтобы посмотреть, поможет ли это (я всегда так делаю)

header('Content-type: application/json');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...