JQuery JSON выпадающий не заполнен

0

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

Любая идея, почему?

  • 0
    Вы смотрели на ответ вашего сервера AJAX с помощью Firebug или тому подобного, чтобы убедиться, что вы получаете то, что ожидаете?
  • 0
    Да, у меня есть, и, похоже, все возвращается, как и ожидалось.
Теги:

4 ответа

2
Лучший ответ

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

Сначала: пытаемся использовать переменную 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)
    );
});
  • 0
    Спасибо за указание на мои ошибки, я действительно ценю это, так что я могу учиться на них! Кроме того, этот код работал отлично!
3

Попробуйте взять 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;
  • 0
    Выпадающий список заполняется теперь, но с 0,1,2 все время, я предполагаю, что это потому, что он получает значение индекса массива?
  • 0
    @kielie, обновил ответ.
0

Прежде всего проверьте код подключения 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

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

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

  • 0
    Спасибо за информацию!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню