2011-10-12 16 views
8

Używam jquery datatable, który ładuje niektóre JSON dynamicznie za pomocą właściwości sAjaxSource. Wszystko jest w porządku, z wyjątkiem tego, że załadowana zawartość jest traktowana jako potencjalny znacznik, więc wszystko jest dziwne, jeśli tekst w komórkach zawiera < lub coś takiego.Znaczniki uśpienia w sterowanej JSON jQuery datatable?

W jaki sposób można uzyskać możliwość usunięcia danych z moich danych przed załadowaniem ich do tabeli? Nie chcę tego robić po stronie serwera, ponieważ serwer nie powinien przejmować się tym, co klient zrobi z danymi.

+0

Spróbuj technika: http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery – rcravens

Odpowiedz

3

[UWAGA: Poniższe odpowiedź jest dla DataTables 1.9x i poniżej. 1.10 zmienił konwencje nazewnictwa metod i kilka innych rzeczy. 1.9x metody są dostępne, ale przestarzałe i nieuchronnie zostaną całkowicie usunięte.]

Jeśli można bezpiecznie usunąć je "hurtowo" (tj. Jeśli opracujesz funkcję ciągu znaków, która nie ma wpływu na ważność JSON), można to zrobić za pomocą funkcji 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 
    } 
    }); 
} 

Jeśli nie jesteśmy pewni o bezpieczeństwo modyfikując to hurtownia, można to zrobić na zasadzie rząd po rzędzie z 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; 
} 

W tej próbce modyfikuję tylko pierwszą komórkę. Jeśli ma zastosowanie do wszystkich komórek, prawdopodobnie będziesz chciał napisać iterator, który przejdzie przez cały wiersz, aby dokonać konwersji. Jeśli dotyczy tylko niektórych komórek, możesz obsługiwać je pojedynczo.

Należy pamiętać, że aData [0] i td: eq (0) tylko przypadkowo mają ten sam indeks (0). Jeśli masz jakieś ukryte kolumny, niekoniecznie będzie pasować. Ponadto, jeśli używasz mDataProp, będziesz musiał to również obsłużyć.

2

Oto kilka prostych bitów:

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

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

Niestety, moje pytanie nie było super jasne, mam rephrased to kawałek . Pytanie nie brzmi "jak uciec ciągi znaków w javascript", "w jaki sposób uzyskać dane wyjściowe, aby uciec ciągi, jak ładuje je ze źródła ajax" – kdt