2011-10-12 36 views
8

Tôi đang sử dụng một số jquery datatable đang tải một số JSON động bằng cách sử dụng thuộc tính sAjaxSource. Mọi thứ đều ổn, ngoại trừ nội dung được tải đang được coi là đánh dấu tiềm năng, vì vậy mọi thứ trở nên lạ nếu văn bản trong các ô có chứa < hoặc somesuch.Đánh dấu thoát trong jQuery có định hướng JSON có thể định cấu hình không?

Làm cách nào để có được dữ liệu để thoát khỏi dữ liệu trước khi tải dữ liệu vào bảng? Tôi không muốn làm điều đó phía máy chủ bởi vì máy chủ không nên quan tâm những gì khách hàng sẽ làm gì với dữ liệu.

+0

Hãy thử kỹ thuật này: http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery – rcravens

Trả lời

3

[lưu ý: các câu trả lời sau đây là dành cho DataTables 1.9x và dưới đây. 1.10 đã thay đổi quy ước đặt tên phương thức và một số thứ khác. Các phương pháp 1.9x có sẵn nhưng không được chấp nhận và chắc chắn sẽ bị loại bỏ hoàn toàn.]

Nếu an toàn để tách chúng "bán buôn" (ví dụ: nếu bạn tạo ra một hàm chuỗi thoát không ảnh hưởng đến giá trị của JSON), bạn có thể làm điều đó bằng cách sử dụng chức năng 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 
    } 
    }); 
} 

Nếu bạn không chắc chắn về sự an toàn của sửa đổi nó bán buôn, bạn có thể làm điều đó trên một cơ sở hàng-by-hàng với 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; 
} 

Trong mẫu này, tôi chỉ sửa đổi ô đầu tiên. Nếu nó có thể áp dụng cho tất cả các ô, bạn có thể muốn viết một trình lặp sẽ đi qua toàn bộ hàng để thực hiện chuyển đổi. Nếu nó chỉ áp dụng cho một số ô, bạn có thể xử lý chúng một lần.

Lưu ý rằng aData [0] và td: eq (0) chỉ tình cờ có cùng chỉ mục (0). Nếu bạn có bất kỳ cột bị ẩn nào, sẽ không nhất thiết phải là một kết quả phù hợp. Ngoài ra, nếu bạn sử dụng mDataProp, bạn sẽ cần phải xử lý đó là tốt.

2

Dưới đây là một vài bit đơn giản:

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

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

Xin lỗi, câu hỏi của tôi không phải là siêu rõ ràng, tôi đã viết lại nó một chút . Câu hỏi không phải là "làm thế nào để tôi thoát khỏi chuỗi trong javascript", đó là "làm thế nào để tôi có được datatables để thoát khỏi chuỗi như nó tải chúng từ một nguồn ajax" – kdt

Các vấn đề liên quan