【问题标题】:how to store php object to access its data on click with javascript如何存储 php 对象以在点击时使用 javascript 访问其数据
【发布时间】:2012-04-20 09:16:05
【问题描述】:

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

目前,我将数据作为自定义属性存储在按钮上。但这会产生很多代码,我听说是“慢”。我想知道是否应该对我的 PHP 对象 $items(见下文)进行 JSON 编码,以及该 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 的问题感到困惑。

【问题讨论】:

    标签: php javascript json codeigniter onclick


    【解决方案1】:

    如果你 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>
    

    希望有帮助:)

    【讨论】:

    • 嗨,Jack,感谢您的帮助,您可以添加到您的 JS 代码中以向我展示点击功能是如何影响的吗?我想将点击功能放在外部 JS 文件中。那么,这是否意味着我有 2 组脚本标签?
    • 嗨,杰克,还有一个问题:我一直不明白为什么人们会在点击 function(evt) 时加上“evt”,如果随后不致电 evt。事实上,我什至不确定人们通常需要在按钮点击内访问的常见事件。意思是,“blahblah”通常会出现在这里:evt.blahblah
    • jQuery 定义了一个统一的事件处理机制,你可以使用,在他们的网站上查看 :) 例如,你可以通过调用 evt.preventDefault() 来阻止点击事件执行其默认行为 - 试试这在带有 href # 的锚点上。单击时,地址栏通常会显示 #。试试看:)
    • 谢谢!哦,是的,evt.preventDefault(),呃,蒂姆!我对 php 也有点困惑。 $items 没有 id 作为键,因此 items[id].img 的“id”部分不存在。这是我目前所处的位置:&lt;?foreach($library as $row):?&gt; &lt;? $id=$row-&gt;folder_id;?&gt; &lt;?endforeach;?&gt; &lt;?$items=array($id =&gt;$library); echo json_encode($items); ?&gt;。这不太对,但您介意帮助弄清楚如何定义 [id] 键吗?
    • 嗯好吧,在 foreach 中你应该改用 $items[$row->folder_id] = $row;
    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多