如何将此postgres db查询的结果转换为json以返回到我的jquery调用?

我正在为我们学校的年度数学竞赛创建比赛注册页面。 当您单击并选择下拉列表中的项目时,它需要一些类似AJAX的行为。

当我在下拉列表中选择某些内容时,我发现了一个事件(我正在显示一个警告框):

 $(function() { $("#student").change(onStudentChange); }); function onStudentChange() { alert("Dropdown changed"); }  

这需要做的是对服务器进行异步调用,以获取学生当前注册的竞赛列表。

我知道我需要做一个jquery ajax调用。 所以我认为我的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没有经验,我很难弄清楚如何将数据库给我的数据返回给JSON格式的这个ajax调用。 我的另一个障碍是我们学校使用的是非常旧版本的PHP,所以我必须使用这个PEAR JSON库。

这是我遇到的PHP文件:

  

所以我的问题是,我如何将$ contests(它的行)转换为JSON(contest.id,contest.title),并将其返回到将使其成为上面的ajax调用。

如果有人能指出我正确的方向,我会非常感激。

 $myarray = array() while ($row = pg_fetch_row($contests)) { $myarray[] = $row; } echo json_encode($myarray); 

我认为这必须奏效。

你也可以这样做

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

这会将每一行编码为JSON对象,并以列名作为键,并将所有行放在JSON数组中

只有在您确定查询将返回一小组数据时才执行此操作。 如果您担心数据大小,请使用@ atif089但使用pg_fetch_assoc()而不是pg_fetch_row()

从postgresql 9.3开始,您可以直接将结果作为带有json_agg的json数组获得:

 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