此函数工作正常,但只返回一个值。我在这里缺少什么?
这是我的代码:
<script type='text/javascript'>
$(function () {
<?php
//Get the names and id's
$get_info=mysql_query("select * from table where id = '1'");
if($get_info){
while($row_info=mysql_fetch_array($get_info))
{
$username=$row_info['name'];
$user_id=$row_info['profile_id'];
?>
onDataRequest:function (mode, query, callback) {
var data = [
{ id:<?php echo $user_id;?>, name:'<?php echo $username;?>', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' }
];
data = _.filter(data, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });
callback.call(this, data);
}
});
<?php
}}
?>
});
</script>
预期结果:
{
id: 295,
name: 'Mike',
'avatar': 'http: //cdn0.4dots.com/i/customavatars/avatar7112_1.gif',
'type': 'contact'
},
{
id: 296,
name: 'John',
'avatar': 'http: //cdn0.4dots.com/i/customavatars/avatar7112_1.gif',
'type': 'contact'
}
实际输出:
{
id: 295,
name: 'Mike',
'avatar': 'http: //cdn0.4dots.com/i/customavatars/avatar7112_1.gif',
'type': 'contact'
}
它只返回1项。
答案 0 :(得分:2)
数据库提取循环不保留每个提取的值。您只需使用当前提取覆盖以前的提取调用。也许你的意思是这样的:
while ($row_info = mysql_fetch_asssoc($result)) {
$username[] = $row_info['name'];
$user_id[] = $row_info['profile_id'];
}
vars上的[]
表示法告诉PHP将vars视为数组并将新值推送到数组中。
然后您将数组插入到javascript中:
var usernames = <?php echo json_encode($username); ?>;
var user_ids = <?php echo json_encode($user_id); ?>;
答案 1 :(得分:2)
每次循环时,都会为onDataRequest javascript函数分配新值,但每次都是相同的函数。您应该考虑执行顺序 - 首先,您执行PHP和MySQL服务器端以及生成的HTML或Javascript代码生成和/或稍后在客户端执行。
基本上,你有一个PHP循环遍历一组值,这些值被放在HTML代码块中的Javascript代码中。所以无论你最后从数据库服务器获取什么,实际执行客户端是什么。
这里的主要思想是你不应该将服务器端的PHP代码与客户端HTML或Javascript代码混合在一起。