如何将此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