2012-02-13 32 views
6

Ok, tôi đã làm việc trên một dự án nhỏ để sử dụng với DataTables. Một plugin lưới jQuery của nó và Ive có hầu hết các chức năng làm việc như dự định bây giờ. Điều duy nhất tôi không thể dường như quấn quanh đầu của tôi là làm cho lưới làm mới trên chỉnh sửa AJAX Inline.Dữ liệu jQuery, lưới làm mới sau khi cập nhật (xử lý phía máy chủ)

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 

     var oTable = $('#example').dataTable({ 

      "bJQueryUI": true, 
      "bProcessing": true, 
      "sAjaxSource": "/test/server_processing.php", 
      "sPaginationType": "full_numbers", 
      "aoColumns": [ { "bVisible": false }, 
     null, 
     null, 
     null 
    ] 
     }).makeEditable({ 
      sAddURL: "AddData.php", 
      sAddHttpMethod: "GET", 
      sDeleteHttpMethod: "GET", 
      sDeleteURL: "DeleteData.php", 
      sUpdateURL: "UpdateData.php", 

      oAddNewRowButtonOptions: { label: "Add...", 
       icons: {primary:'ui-icon-plus'} 
      }, 
      oDeleteRowButtonOptions: { label: "Remove", 
       icons: {primary:'ui-icon-trash'} 
      }, 

      oAddNewRowFormOptions: {  
       title: 'New Toll Free number', 
       show: "blind", 
       hide: "explode", 
       modal: true 
      }, 
      sAddDeleteToolbarSelector: ".dataTables_length"        
     }); 
}); 
</script> 

Đây là tập tin updatedata.php tôi

$editedColumn = $_POST['columnId']; 
$editedValue = $_POST['value']; 
$id = $_POST['id']; 

if ($editedColumn == '1') { 
    $sql = "update Main set name='$editedValue' where id='$id'";      
} elseif ($editedColumn == '2') { 
    $sql = "update Main set dn='$editedValue' where id='$id'";     
} elseif ($editedColumn == '3') { 
    $sql = "update Main set dn1='$editedValue' where id='$id'";     
} 
/* Update a record using information about id, columnName (property 
of the object or column in the table) and value that should be 
set */ 
$sql2 = "select name from Main where id = '$id';"; 

mysql_query($sql) or die(mysql_error()); 

echo "Update ok, reload to see changes"; 

Tôi có tiếng vang ở cuối vì nó có vẻ bật một alert() một số nơi và tiếng vang lấp đầy mà cảnh báo với thông tin.

Tôi biết về các chức năng vẽ lại lưới như fnDraw nhưng không có dấu vết như cách triển khai.

+0

Tôi đã gặp giống như bạn :) và đang chờ lừa. – sophie

+0

hãy cẩn thận khi tiêm. –

Trả lời

-1

Xem http://code.google.com/p/jquery-datatables-editable/wiki/EditCell#PHP_Example trang của bạn phải trả về cùng giá trị với giá trị bạn đã lấy từ yêu cầu. Nếu không, bất kỳ giá trị nào khác (khác) sẽ được coi là thông báo lỗi, được hiển thị trong cửa sổ bật lên và làm mới sẽ bị hủy.

Jovan

+0

ý của bạn là gì? trang của bạn phải trả lại cùng một giá trị với trang bạn đã lấy từ yêu cầu.? Bạn có thể giải thích rõ ràng hơn về điều này, bởi vì tôi đã gặp vấn đề này, và vẫn còn bị mắc kẹt trên đó. Cảm ơn – sophie

0

Để mở rộng câu trả lời ở trên, bạn nên trả lại giá trị bạn gửi cho tệp php.

như vậy trong trường hợp của bạn có giá trị của bạn là ở

$editedValue = $_POST['value']; 

Vì vậy, bạn phải trả lại (echo) giá trị đó trở lại.

echo $editedValue; 

Bất cứ điều gì khác hơn thế sẽ được coi như một thông báo lỗi đó là lý do bạn thấy thông báo của bạn, nên bằng cách làm theo này lưới nên làm mới tự động như bây giờ tin rằng không có lỗi.

Tất cả các thông tin trên có thể được tìm thấy here

Là một lưu ý bên này

$sql2 = "select name from Main where id = '$id';"; 

sẽ không cần thiết như giá trị trở lại đã hiện diện.

0

thay vì ...

hỏi để làm mới được thông báo trang, tại sao không u viết mã để tải lại trang để kết quả được cập nhật xuất hiện trên màn hình sau khi dữ liệu được được cập nhật. Để làm như vậy sử dụng.

echo "<script>window.location='pageName.php'</script>"; 
+0

'window.location.reload()' –

-1

Không thể bạn thực hiện kịch bản updatedata.php bạn echo ra các nội dung bên trong của bảng, bằng cách này bạn có thể, trên thành công AJAX chạy sau

jQuery('TABLE#referencedTable').html(newData); 

này sau đó sẽ cập nhật bảng của bạn với dữ liệu mới nhất.

+1

Bảng được điền bởi plugin DataTables, được phân phát dữ liệu (có lẽ là JSON) bởi PHP. OP rõ ràng đang tìm kiếm API trong DataTables để kích hoạt bản cập nhật. –

0

Trước hết tôi không thấy

"bServerSide": true 

thiết lập bất cứ nơi nào.

Thử vẽ lại với oTable.fnDraw() hoặc oTable.fnDraw(oTable.fnSettings())

Khi bạn đang sử dụng serverside chế biến bạn phải trả lạisEcho biến đi kèm với yêu cầu (nên được thêm vào DataTable của bạn tự động bởi DataTable). Nếu không, refresh sẽ không làm gì vì dataTable bỏ qua các yêu cầu đáp ứng với các sEcho khác với mong đợi.

Kiểm tra bạn DataTables cấu hình sử dụng debug bookmarklet: dataTable debugger

0

Tại sao bạn không thể gọi cuộc gọi ajax cho Populating lưới một lần nữa? sau mỗi lần thêm, xóa hoặc cập nhật hoạt động?

Bạn có thể làm điều đó, bằng cách gọi cùng

$('#example').dataTable({ 

      "bJQueryUI": true, 
      "bProcessing": true, 
      "sAjaxSource": "/test/server_processing.php", 
      "sPaginationType": "full_numbers", 
      "aoColumns": [ { "bVisible": false }, 
     null, 
     null, 
     null 
    ] 
     }); 
1

Nếu bạn cần phải tải lại dữ liệu AJAX của DataTable của bạn dựa trên một sự kiện hoặc một cái gì đó, chỉ cần sử dụng các phương pháp fnReloadAjax. Bạn có thể tìm thấy tài liệu here.

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