如何动态设置Javascript中的数组?

时间:2011-07-19 18:17:47

标签: php javascript mysql html

我正在开发一个电子商务网站。 javascript中的数组“产品”由以下代码

定义
<script type="text/javascript">
    var products = 
    [
         {"id":"1","title":"Apple iPhone 4"},
         {"id":"2","title":"BlackBerry 9780 Bold"}
    ];
    /*some other javascript code*/
</script>

我希望根据查询数据库返回的行数动态更新此数组。 例如,假设我查询数据库并返回5行。我希望用这5行更新这个数组。请帮我完成这件事。我在Windows机器上使用PHP,MySQL,Apache。

5 个答案:

答案 0 :(得分:2)

您需要push功能:http://www.w3schools.com/jsref/jsref_push.asp

var products = 
[
     {"id":"1","title":"Apple iPhone 4"},
     {"id":"2","title":"BlackBerry 9780 Bold"}
];

// Let's add a new phone:
products.push({"id":"3","title":"HTC Evo"});

/*
    products now equals: 
    [
         {"id":"1","title":"Apple iPhone 4"},
         {"id":"2","title":"BlackBerry 9780 Bold"},
         {"id":"3","title":"HTC Evo"}
    ];
*/

为了说明您可能拥有现有数组的可能性并且您想通过ajax更新它,您可以使用PHP动态执行此操作:

<script type="text/javascript">
<?php foreach($phones as $phone): ?>
    products.push({"id":"<?=$phone['id']?>","title":"<?=$phone['name']?>"});
<?php endforeach; ?>
</script>

答案 1 :(得分:1)

top answer to the question JSON encode MySQL results可以为您实现这一目标:

$sth = mysql_query("SELECT ...");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows[] = $r;
}

print json_encode($rows);

在您的情况下,用

替换最后一行
?>
var products = <?php echo json_encode($rows); ?>;
<?php

会使用您的查询结果初始化JavaScript对象。这需要在加载页面之前完成,因为PHP在服务器上运行,为客户端生成JavaScript。如果您需要在加载客户端页面后获得结果,则需要更复杂的解决方案,可能使用AJAX。

答案 2 :(得分:0)

我会创建一个服务器端脚本,它与数据库建立连接,得到产品,然后为你构建JSON,这样你所要做的就是从客户端向脚本发出一个AJAX请求,它将返回您在网页上使用的所有内容。

答案 3 :(得分:0)

您可以使用PHP将json直接输出到页面中。

假设$data是包含您要输出的产品的数组。

在模板中你会做这样的事情:

<script type="text/javascript">
var products =  <?php echo json_encode($data) ?>;
</script>

答案 4 :(得分:0)

products[products.length] = {..some data..};
products.push({..some data..});

或者您还需要其他东西吗?