【问题标题】:Passing HTML through JSON (PHP and DOJO)通过 JSON 传递 HTML(PHP 和 DOJO)
【发布时间】:2011-05-18 06:45:56
【问题描述】:

我有一个正在查询数据库并输出 JSon 的数据存储区……类似这样:

$data[] = array('id' => $i, 'prod_id' => $product_id, 'link' => $link);

我想知道如何使用 $link 变量传回链接。例如,如果我有这个:

$link = "<a href=\"google.com\"> Clicky </a>";

datagrid 会显示 Clicky 而不是实际的 html 链接...有没有办法传回 html?

【问题讨论】:

    标签: php javascript json datagrid dojo


    【解决方案1】:

    您可以在 dojo 网格中使用formatter 来格式化每个单元格中显示的 HTML。创建网格时,您可以为每一列设置一个formatterformatter 是一个 JavaScript 函数,它接受两个参数,第一个 value 表示单元格的值,第二个 rowIndex 表示当前行的索引。 formatter函数的返回值是单元格中显示的HTML内容。

    对于您的情况,我建议您对链接 URL 和锚文本使用一列。您可以使用简单的编码,例如http://www.google.com$$$Clicky,其中$$$ 用于分隔这两个字段。 PHP 代码是:

    $link = "http://www.google.com$$$Clicky";
    

    然后在您的formatter 函数中,您可以使用:

    function(value, rowIndex) {
        var parts = value.split('$$$');
        return "<a href='" + parts[0] + "'>" + parts[1] + "</a>";
    } 
    

    如果您更喜欢为每个字段使用一列,例如url 用于 URL,anchorText 用于锚文本。然后在格式化单元格时需要获取另一列的值。假设网格使用url 字段。那么formatter 函数可能如下所示:

    function(value, rowIndex) {
       var item = grid.getItem(rowIndex); // Get the store item by index, need the reference of the grid.
       var anchorText = grid.store.getValue(item, 'anchorText');
       return "<a href='" + value + "'>" + anchorText + "</a>";
    }
    

    【讨论】:

    • 感谢您的精彩解释。然而,我最终使用了 escapeHTMLInData="false".. 但稍后会记住格式化程序功能! :)
    • 啊,escapeHTMLInData='false',我以前不知道。感谢您的信息。 :)
    【解决方案2】:

    我建议分别传递链接 URL 和链接文本,然后在客户端将它们重构为 JavaScript 中的锚链接。

    您也可以尝试转义 HTML,然后在客户端取消转义。

    我不知道它为什么不发送链接——也许浏览器试图过早解析发送的 HTML?

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 2014-02-11
      • 1970-01-01
      • 2018-09-10
      • 2012-04-12
      • 2019-06-11
      • 1970-01-01
      • 2012-10-27
      相关资源
      最近更新 更多