将数组值从php传递到javascript数据只返回一个值


Passing array values from php to javascript data returns only one value

这个函数工作得很好,但是它只返回一个值。我错过了什么?

下面是我的代码:

  <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项

数据库获取循环没有保留每个获取的值。您只需用当前获取覆盖之前的获取调用。也许你的意思是:

while ($row_info = mysql_fetch_asssoc($result)) {
    $username[] = $row_info['name'];
    $user_id[] = $row_info['profile_id'];
}

变量的[]符号告诉PHP将变量作为数组处理,并将新值压入数组。

然后将数组插入到javascript中:

var usernames = <?php echo json_encode($username); ?>;
var user_ids = <?php echo json_encode($user_id); ?>;

每次循环时,您都为onDataRequest javascript函数分配新值,但是,每次都是相同的函数。你应该考虑一下执行顺序——首先,你在服务器端做php和MySQL,然后生成HTML或Javascript代码,然后在客户端渲染和/或执行。

基本上,你有一个PHP循环,遍历一组值,这些值被放在HTML代码块内的Javascript代码中。无论你最后从数据库服务器取回什么,都是实际在客户端执行的

这里的主要思想是,您不应该将服务器端PHP代码与客户端HTML或Javascript代码混合在一起。