0

我试图找出最不显眼且计算成本最低的方式来存储来自我的 MySQL 数据库的 PHP 对象,这样它们的数据就可以在用户点击时由 JavaScript 呈现。

目前,我将数据存储为按钮上的自定义属性。但这会产生很多代码,我听说是“慢”。我想知道我是否应该对我的 PHP 对象进行 JSON 编码$items(见下文),以及 JavaScript 的外观。注意我正在为 PHP 使用 Codeigniter,所以这就是备用foreach循环语法。

到目前为止,这是我使用 HTML/PHP 的地方:

<img id="img"></img><a id="url"></a> <!--elements where data is rendered on click-->
<? foreach($items as $item):?>  
<button data-id="<?=$item->id?>" data-url="<?=$item->url?>" data-img="<?=$item->img?>">click<?=$item->id?></button>
<?endforeach;?>

这是我的 JS:

$(document.body).on('click', 'button', function(){
   var $this=$(this), id=$this.data('id'), url=$this.data('url'), img=$this.data('img');
   $('#img').attr('src', img);
   $('#url').attr('href', url).html(url);
});

我网站的大部分数据都是通过 MySQL 来自 PHP,长期以来我一直对何时应该将该数据转换为 JavaScript 数组/JSON 的问题感到困惑。

4

1 回答 1

4

如果您json_encode$items数组(假设它仅包含您在 JS 中需要的数据),您可以将其分配给 JS 变量:

<script>var items = <?php echo json_encode($items); ?></script>

然后,您可以删除data-urldata-img属性。然后,在您的 JS 代码中:

var $this = $(this), id = $this.data('id'), url = items[id].url, img = items[id].img;
// the rest of your code

编辑:当你在一个单独的文件中移动点击处理程序时,你会得到这样的东西:

function setup_click(items) {
    var $img = $('#img'), $url = $('#url');

    $('button').click(function(evt) {
           var id = $(this).data('id'),
           url = String(items[id].url),
           img=String(items[id].img);
       $url.attr('href', url).html(url);         
           $img.attr('src', img);
    });
}

这是一个展示 javascript/JSON 部分的 JSfiddle:http: //jsfiddle.net/fz5ZT/55/

要从您的模板中一次性调用它:

<script src="[your ext script file path].js"></script>
<script>setup_click(<?php echo json_encode($items); ?>);</script>

希望有帮助:)

于 2012-04-20T09:24:27.853 回答