Dzisiaj w pracy aktualizowałem DataTables do wersji 1.10, która wprowadziła parę breaking changes (starając się przy tym, być cały czas kompatybilna z poprzednią wersją).
Wszystko by było fajnie gdyby requesty które wykonuje do serwera brały pod uwagę zmiany w API.
Prosty przykład, request który wysyłała moja aplikacja wyglądał tak:
sEcho:1 iColumns:5 sColumns:,,,, iDisplayStart:0 iDisplayLength:10 mDataProp_0:email sSearch_0: bRegex_0:false bSearchable_0:true bSortable_0:true mDataProp_1:firstName sSearch_1: bRegex_1:false bSearchable_1:true bSortable_1:true mDataProp_2:lastName sSearch_2: bRegex_2:false bSearchable_2:true bSortable_2:true mDataProp_3:organisationName sSearch_3: bRegex_3:false bSearchable_3:true bSortable_3:true mDataProp_4:userId sSearch_4: bRegex_4:false bSearchable_4:false bSortable_4:false sSearch: bRegex:false iSortCol_0:0 sSortDir_0:asc iSortingCols:1
Co jest poprawne ze starą wersją DT, w nowej powinien on wyglądać tak:
draw:1 columns[0][data]:email columns[0][name]: columns[0][searchable]:true columns[0][orderable]:true columns[0][search][value]: columns[0][search][regex]:false columns[1][data]:firstName columns[1][name]: columns[1][searchable]:true columns[1][orderable]:true columns[1][search][value]: columns[1][search][regex]:false columns[2][data]:lastName columns[2][name]: columns[2][searchable]:true columns[2][orderable]:true columns[2][search][value]: columns[2][search][regex]:false columns[3][data]:organisationName columns[3][name]: columns[3][searchable]:true columns[3][orderable]:true columns[3][search][value]: columns[3][search][regex]:false columns[4][data]:userId columns[4][name]: columns[4][searchable]:false columns[4][orderable]:false columns[4][search][value]: columns[4][search][regex]:false order[0][column]:0 order[0][dir]:asc start:0 length:10 search[value]: search[regex]:false
Po dłuższym czytaniu znalazłem informację o tym, jak zmienić to by wykonał on request w wersji 1.10
– okazało się, że trzeba ustawić wartość ext.legacy.ajax
na false
:
$.fn.dataTable.ext.legacy.ajax = false;
Ale to mi nie dało spokoju, dlaczego nowa wersja 1.10 wykonuje mi domyślnie zapytanie w starej wersji?
Rozwiązanie przyszło wraz z przeczytaniem informacji o tym jak zaktualizować istniejący kod pod nową wersję biblioteki. Okazuje się, że wartość ext.legacy.ajax
jest ustawiona domyślnie na null
, co powoduje, że DT sam decyduje o tym jak wykonać zapytanie. Ale oczywiście nigdzie nie ma informacji na podstawie czego decyduje.
Rozwiązanie okazało się proste, jeżeli wykorzystanie starą nazwę własności do określenia URLa ajaxowego (sAjaxSource
), zapytanie będzie wykonane starym sposobem. Jeżeli wykorzystacie nową nazwę (ajax
), zapytanie będzie wykonane nowym sposobem.
Ogólnie na takiej drobnostce, mogę powiedzieć, że zmarnowałem 2h :)
Mam nadzieję, że komuś się może ten post przydać :)