2012-02-13 19 views
6

Ok, pracowałem nad małym projektem do użytku z DataTables. Jest to wtyczka jQuery grid i Ive ma większość funkcjonalności działającej zgodnie z zamierzeniami. Jedyne, co wydaje mi się nie do końca objąć, to odświeżenie siatki w edytorze AJAX Inline.jQuery DataTables, odśwież siatkę po aktualizacji (przetwarzanie po stronie serwera)

<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> 

To jest mój plik updatedata.php

$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"; 

mam echo na końcu, ponieważ wydaje się pop alert() niektóre miejsca i echo wypełnia tę alert z informacją.

Znam funkcje do przerysowywania siatki jak fnDraw, ale jestem bez pojęcia, jak wdrożyć.

+0

Spotkałem się tak samo jak ty :) i czekam na lewę. – sophie

+0

uwaga na wstrzyknięcie. –

Odpowiedz

-1

Patrz strona http://code.google.com/p/jquery-datatables-editable/wiki/EditCell#PHP_Example twoja strona powinna zwracać taką samą wartość, jaka została pobrana z żądania. W przeciwnym razie jakakolwiek inna (różna) wartość zostanie uznana za komunikat błędu, wyświetlona w oknie podręcznym i odświeżeniu zostanie anulowana.

Jovan

+0

co masz na myśli? twoja strona powinna zwracać taką samą wartość jak ta, którą pobrałeś z prośby. Czy możesz wyjaśnić to dokładniej, ponieważ również spotkałem się z tym problemem i nadal go utknąłem. Dzięki – sophie

0

Aby rozwinąć na powyższej odpowiedzi, należy zwrócić wartość wysyłanych do pliku php.

tak w przypadku, gdy wartość ta jest w

$editedValue = $_POST['value']; 

Należy więc zwrócić (echo), że wartość z powrotem.

echo $editedValue; 

coś innego niż, który będzie traktowany jako komunikat o błędzie, który jest dlaczego widzisz swoją czujność, więc wykonując to siatka powinna odświeżać automatycznie, jak to teraz uważa, że ​​nie ma żadnego błędu.

Wszystkie powyższe informacje można znaleźć here

marginesie to

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

nie byłaby potrzebna jako wartość powrotu jest już obecny.

0

zamiast ...

prosząc, aby odświeżyć wiadomości strony, dlaczego nie u napisać kod, aby odświeżyć stronę tak zaktualizowany wynik pojawia się na ekranie po dane zostały zaktualizowane. Aby to zrobić, użyj.

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

'window.location.reload()' –

-1

nie można zrobić skrypt updatedata.php echo się wewnętrzne zawartość tabeli, w ten sposób można, w przypadku powodzenia AJAX uruchomić następujące

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

ten będzie następnie zaktualizować tabelę z najnowszymi danymi.

+1

Tabela jest wypełniona przez wtyczkę DataTables, która jest obsługiwana przez PHP (prawdopodobnie jako JSON). OP wyraźnie szuka API w DataTables, aby uruchomić aktualizację. –

0

Przede wszystkim nie widzę

"bServerSide": true 

ustawić w dowolnym miejscu.

Spróbuj przerysowywania z oTable.fnDraw() lub oTable.fnDraw(oTable.fnSettings())

Kiedy używasz ServerSide przetwarzanie Ci musi powrócićsEcho zmienną dołączonej do wniosku (należy doliczyć do DataTable automatycznie przez DataTable). W przeciwnym razie odświeżanie nic nie robi, ponieważ dataTable ignoruje odpowiedź na żądanie z innym sEcho niż oczekiwano.

Sprawdź DataTables config używając debugowania bookmarkletu: dataTable debugger

0

Dlaczego nie możesz zadzwonić do wywołania AJAX ponownie zapełnianie siatkę? po każdym dodaniu, usuwać lub aktualizować operacje?

Można to zrobić, dzwoniąc samo

$('#example').dataTable({ 

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

Jeśli trzeba przeładować dane AJAX swojej DataTable w oparciu o zdarzenia, czy coś, po prostu użyć metody fnReloadAjax. Możesz znaleźć dokumentację here.

Powiązane problemy