Как я могу преобразовать результат этого db-запроса postgres в json, чтобы вернуться к моему вызову jquery? - PullRequest
1 голос
/ 02 декабря 2009

Я создаю страницу регистрации для участия в нашем ежегодном конкурсе по математике в моей школе. При щелчке и выборе элемента в раскрывающемся списке требуется поведение, подобное AJAX.

Я получил событие, которое срабатывает, когда я выбираю что-то в раскрывающемся списке (в данный момент я показываю окно с предупреждением):

<script type="text/javascript">
    $(function() {
        $("#student").change(onStudentChange);
     });

     function onStudentChange()
     {
         alert("Dropdown changed");
     }
</script>

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

Я знаю, что мне нужно сделать ajax-вызов jquery. Поэтому я думаю, что моя функция onStudentChange () будет выглядеть так:

$.ajax({
    type : 'POST',
    url : 'get_registered_events.php',
    dataType : 'json',
    data: {
    studentid : $('#student').val()
    },
    success : function(data){
        // Do something once we get the data
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
        // Display error
        }
        });

        return false;
});

Итак, я продолжил и создал get_registered_events.php, для которого я хочу вернуть события, на которые зарегистрирован студент.

Моя проблема в том, что у меня нет опыта работы с PHP, и мне трудно понять, как мне вернуть данные, которые база данных дала мне для этого вызова ajax, в формате JSON. Еще одна загвоздка в том, что наша школа использует очень старую версию PHP, поэтому я должен использовать эту библиотеку PEAR JSON .

Вот тот PHP-файл, с которым у меня проблемы:

<?php

if (!empty($_POST['studentid')) {

    include_once('JSON.php');
    $json = new Services_JSON();

    $dbconn = pg_connect("host=somehost dbname=somedb user=someuser password=somepassword") or die('Could not connect: ' . pg_last_error());
    $query = 'SELECT contest.id, contest.title, FROM contest, student_contest WHERE student_id = '.$_POST['studentid'].' AND contest.id = contest_id';
    $contests = pg_query($query) or die('Query failed: ' . pg_last_error());

    // Here I need to convert the rows of $contests (contest.id, contest.title), into JSON and return it to that ajax call.

}

?>

Итак, мой вопрос: как мне преобразовать $ contests (его строки) в JSON (test.id ,test.title) и вернуть его обратно в вызов ajax, который сделает его выше.

Если бы кто-нибудь мог указать мне правильное направление, я был бы очень признателен.

Ответы [ 3 ]

4 голосов
/ 22 августа 2012

Вы также можете сделать

$resultArray = pg_fetch_all($result);
echo json_encode($resultArray);

Это закодирует каждую строку в виде объекта JSON с именем столбца в качестве ключа и поместит все строки в массив JSON

Делайте это только в том случае, если вы точно знаете, что ваш запрос вернет небольшой набор данных. Если вас беспокоит размер данных, используйте @ atif089, но используйте pg_fetch_assoc() вместо pg_fetch_row()

4 голосов
/ 02 декабря 2009
$myarray = array()
while ($row = pg_fetch_row($contests)) {
  $myarray[] = $row;
}

echo json_encode($myarray);

Я думаю, это должно работать.

0 голосов
/ 07 сентября 2015

В postgresql 9.3 вы можете получить результат непосредственно в виде массива json с помощью json_agg:

With p as (
SELECT contest.id, contest.title, FROM contest, student_contest WHERE student_id = '.$_POST['studentid'].' AND contest.id = contest_id
)
select json_agg(p) as json from p;

http://www.postgresql.org/docs/9.3/static/functions-aggregate.html

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