Używam DataTables (świetna wtyczka) do tworzenia list.
Adres URL AJAX używający do tego celu ma zmienne zagnieżdżone na końcu.
"ajax": "ajax/appointments/cancelled.php?appointment_date="+localStorage["ajaxDate"],
gdzie localStorage ["ajaxDate"] = dzisiejsza data
Oto mój pełny kod danych:
var table = $("#cancelled_table").DataTable( {
"ajax": "ajax/appointments/cancelled.php?clinic_id=<? echo $clinic_id ?>&appointment_date="+localStorage["ajaxDate"],
"columns": [
{
"className": "details-control",
"orderable": false,
"data": null,
"defaultContent": ""
},
{ "data": "time" },
{ "data": "first" },
{ "data": "last" },
{ "data": "petname" },
{ "data": "apt" },
{ "data": "species" },
{ "data": "phone" },
{ "data": "status" },
{ "data": "button" }
],
"order": [[1, "asc"]]
} );
// Add event listener for opening and closing details
$("#cancelled_table tbody").on("click", "td.details-control", function () {
var tr = $(this).closest("tr");
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass("shown");
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass("shown");
}
} );
Mogę przerysować tę tabelę, gdy informacje o bazie danych zmienią się na:
cancelledTable.ajax.reload();
Powyższy kod jest wyzwalany po kliknięciu „Następny dzień”. Lokalny magazyn [„ajaxDate”] var zostaje zwiększony o 1.
Problem polega na tym, że po ponownym załadowaniu ajax nie używa nowego localStorage ["ajaxDate"] jako daty.
Chciałbym opublikować to, co próbowałem, ale nie mam jednego pomysłu, jak uzyskać anulowaneTable.ajax.reload (), aby zobaczyć, że zmienna zagnieżdżona w adresie URL uległa zmianie.
Jakieś pomysły? Dziękuję Ci
Odpowiedzi:
1 dla odpowiedzi № 1Można to zrobić na wiele sposobów, jeden z nich pokazano poniżej. Dla zwięzłości pominąłem niektóre części twojego kodu.
var table = $("#cancelled_table").DataTable({
"ajax": {
"data": function(){
$("#cancelled_table").DataTable().ajax.url(
"ajax/appointments/cancelled.php"
+ "?clinic_id=<? echo $clinic_id ?>"
+ "&appointment_date=" + localStorage["ajaxDate"]
);
}
},
"columns": [
// ...
]
});
Kiedy zmieniają się informacje o bazie danych, zakładam, że aktualizujesz dane localStorage["ajaxDate"]
. Następnie musisz zadzwonić:
table.ajax.reload();
Spowoduje to, że funkcja określona w ajax.data opcja do wywołania. Ta funkcja zwrotna używa bieżącej wartości w localStorage["ajaxDate"]
i aktualizuje adres URL żądania Ajax.