Сбросить разметку в JQuery-данных с помощью JSON? - PullRequest
8 голосов
/ 12 октября 2011

Я использую jquery datatable , который загружает некоторые JSON динамически, используя свойство sAjaxSource.Все хорошо, за исключением того, что загруженный контент рассматривается как потенциальная разметка, поэтому все становится странным, если текст в ячейках содержит < или что-то в этом роде.

Как я могу получить datatables для экранирования моих данных перед загрузкой вТаблица?Я не хочу делать это на стороне сервера, потому что сервер не должен заботиться о том, что клиент собирается делать с данными.

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

[примечание: следующий ответ для DataTables 1.9x и ниже.1.10 изменил правила именования методов и несколько других вещей.Методы 1.9x доступны, но устарели и неизбежно будут полностью удалены.]

Если безопасно удалить их "оптом" (т. Е. Если вы разрабатываете функцию escape-строки, которая не влияет на валидность 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
    }
  });
}

Если вы не уверены в безопасности его оптовой модификации, вы можете сделать это построчно с помощью 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;
}

В этом примере я изменяю только первую ячейку.Если это применимо ко всем ячейкам, вы, вероятно, захотите написать итератор, который пройдет всю строку, чтобы выполнить преобразование.Если это применимо только к некоторым ячейкам, вы можете обрабатывать их по одной за раз.

Обратите внимание, что aData [0] и td: eq (0) только по совпадению имеют одинаковый индекс (0).Если у вас есть скрытые столбцы, совпадение не обязательно будет.Кроме того, если вы используете mDataProp, вам также придется с этим справиться.

2 голосов
/ 12 октября 2011

Вот пара простых битов:

function htmlEncode(value) {
    return $('<div/>').text(value).html();
}

function htmlDecode(value) {
    return $('<div/>').html(value).text();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...