在JSON驱动的jQuery数据表中转义标记?

kdt*_*kdt 9 javascript jquery datatables

我正在使用jquery数据表,它使用该sAjaxSource属性动态加载一些JSON .一切都很好,除了加载的内容被视为潜在的标记,所以如果单元格中的文本包含<或某些东西,事情会变得奇怪.

在将数据加载到表中之前,如何让数据表转义我的数据?我不想做服务器端,因为服务器不应该关心客户端将如何处理数据.

Gre*_*tit 5

[注意:以下答案适用于1.9x及以下的DataTables。1.10更改了方法命名约定和其他一些内容。可以使用1.9x方法,但已弃用,并且不可避免地将其完全删除。]

如果可以安全地“批发”剥离它们(即,如果您设计了一个不影响JSON有效性的转义字符串函数),则可以使用fnServerData函数来做到这一点:

"fnServerData": function ( sSource, aoData, fnCallback ) {
  $.ajax( {
    "dataType": 'json',
    "type": "GET",
    "url": sSource,
    "data": aoData,
    "success": function (data) {
      // run your escape string function to modify 'data'
      fnCallback(data); // or fnCallback(newData) if you used new variable
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

如果您不确定批量修改的安全性,可以使用fnRowCallback逐行进行:

"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {

  var cellData = myEscaper(aData[0]); // where myEscaper() is your own custom function
  $('td:eq(0)').text(cellData);

  return nRow;
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,我仅修改第一个单元格。如果适用于所有单元格,则可能需要编写一个迭代器,该迭代器将遍历整个行以进行转换。如果仅适用于某些单元,则可以一次处理一个。

请注意,aData [0]和td:eq(0)恰好具有相同的索引(0)。如果您有任何隐藏的列,则不一定有匹配项。另外,如果您使用mDataProp,则也需要处理它。