通过JSON传递HTML(PHP和DOJO)

时间:2010-12-01 03:30:12

标签: php javascript json datagrid dojo

我有一个数据存储区,它正在查询数据库并输出JSon ......就像这样:

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

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

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

数据网格会显示Clicky而不是实际的html链接...无论如何都要传回html?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您可以在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>";
}