我正在为我们学校的年度数学竞赛创建比赛注册页面。当您单击并选择下拉列表中的项目时,它需要一些类似AJAX的行为。
当我在下拉列表中选择某些内容时(我正在显示一个警告框),我发现了一个事件:
<script type="text/javascript">
$(function() {
$("#student").change(onStudentChange);
});
function onStudentChange()
{
alert("Dropdown changed");
}
</script>
这需要做的是对服务器进行异步调用,以获取学生当前注册的竞赛列表。
我知道我需要做一个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文件:
<?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(contest.id,contest.title),并将其返回到将使其成为上面的ajax调用。
如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:4)
$myarray = array()
while ($row = pg_fetch_row($contests)) {
$myarray[] = $row;
}
echo json_encode($myarray);
我认为这必须奏效。
答案 1 :(得分:3)
您也可以
$resultArray = pg_fetch_all($result);
echo json_encode($resultArray);
这会将每一行编码为JSON对象,并以列名作为键,并将所有行放在JSON数组中
只有在您确定查询将返回一小组数据时才执行此操作。如果您担心数据大小,请使用@ atif089但使用pg_fetch_assoc()
代替pg_fetch_row()
答案 2 :(得分:0)
从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