Maciej
Filipiak
właściciel,
VizMedia
Temat: formatowanie elementów dopisanych przez Ajax
CześćDokucza mi taki problem
Zainstalowałem pluginy jQuery - np. do sortowania tabeli (tableSorter).
Z tym, że tabelę pobieram do diva za pomocą funkcji ajax - też jquery.
obsługa sortowania zostaje doklejona do tabeli po wywołaniu
$("#myTable").tablesorter();
Sortowanie mogę włączyć dopiero PO wczytaniu tabeli - czyli muszę
albo:
1. odczekać parę sekund - co jest głupim rozwiązaniem
2. albo dopisać obsługę funkcji do funkcji po pomyślnym zaciągnięciu tabeli
$.ajax ({
type: "POST",
url: "http://www.mypage.com/pobierz_tabele",
success: function(html){$("#divTable").html(html), uruchomsortowanie() },
error: function(html){ }
});
Teoretycznie funkcja uruchomsortowanie() powinna zostać wywołana po umieszczeniu odpowiedzi ajaxa (tabeli) w div'ie
Ale tak nie jest :( skrypt tableSorter odpala się zanim tabelka zostanie do końca narysowana - sortowanie albo nie działa wcale, albo działa nieprawidłowo.
Jak zsynchronizować w czasie te dwa procesy ? (ajax, potem tableSorter)Maciej Filipiak edytował(a) ten post dnia 20.09.11 o godzinie 09:17
Szymon
Stępniak
IT Manager / Scrum
Master
Temat: formatowanie elementów dopisanych przez Ajax
Cześć Macieju,Spróbuj wyłączyć obsługę żądania asynchronicznego:
$.ajax ({
type: "GET",
url: "http://www.mypage.com/pobierz_tabele",
async: false,
success: function(html){$("#divTable").html(html).tablesorter(); },
error: function(html){ }
});
Po załadowaniu potrzebnych danych możesz na wskazanym kontenerze od razu uruchomić tablesortera i wszystko powinno zadziałać zgodnie z oczekiwaniami. W powyższym kodzie zmieniony został również typ żądania na GET.
PS: jeśli przetwarzanie żądania AJAX-owego trwa zbyt długo rozważ np. możliwość zwracania danych w formacie JSON i generowania tabelki po stronie przeglądarki - często pozwala to skrócić dość diametralnie czas oczekiwania na odpowiedź, ponieważ odpada nam zarówno generowanie HTMLa po stronie serwera jak i zmniejsza się rozmiar zwracanych w odpowiedzi danych.
Mam nadzieję, że moje wskazówki okażą się pomocne :-)
Maciej
Filipiak
właściciel,
VizMedia
Temat: formatowanie elementów dopisanych przez Ajax
Wielkie dzięki Szymonie ! Chyba o to chodziło - jutro przetestuje.
Piotr
L.
projektowanie user
experience,
interakcji,
architektura i...
Temat: formatowanie elementów dopisanych przez Ajax
a nie lepiej to: http://api.jquery.com/ajaxComplete/ ??z dokumentacji (http://api.jquery.com/jQuery.ajax/):
"complete(jqXHR, textStatus)Function, Array
A function to be called when the request finishes (after success and error callbacks are executed)." (pogrubienie moje)Piotr L. edytował(a) ten post dnia 21.09.11 o godzinie 10:10
Maciej
Filipiak
właściciel,
VizMedia
Temat: formatowanie elementów dopisanych przez Ajax
w uruchomsortowanie() jest poprostu$("#myTable").tablesorter();
Mateusz
G.
Front-End Developer
(e-creativo/Roche)
Temat: formatowanie elementów dopisanych przez Ajax
Cześć,Zakładam, że funkcja success() rusza (najlepiej sprawdzić zwykłym alert())? Jeśli tak, to jak duża jest ta tabela skoro tak spowalnia skrypt? Może pokombinuj z eventem $.load() na $('#myTable').
BTW - używasz firebuga?
Maciej
Filipiak
właściciel,
VizMedia
Temat: formatowanie elementów dopisanych przez Ajax
to nie chodzi o wielkość tabeli - tylko o równolegle wykonywane wątki.Tabela była prawdopodobnie formatowana tablesorterem zanim zdążyła się cała pobrać.
async: false
rozwiązało problem
Andrzej
Winnicki
Frontend Architect,
Developer &
Magician
Temat: formatowanie elementów dopisanych przez Ajax
Ale na tym polega cala przyjemnosc i wypasnosc - ajaxowanie asychronicznie :)Dane sa w pelni niezalezne od kolejnosci zadan skryptu/aplikacji i sa wtedy, kiedy beda ;)Andrzej Winnicki edytował(a) ten post dnia 30.09.11 o godzinie 23:24
Maciej
Filipiak
właściciel,
VizMedia
Temat: formatowanie elementów dopisanych przez Ajax
nawias źle przepisałempowinno być tak:
html(html, uruchomsortowanie())
Piotr
L.
projektowanie user
experience,
interakcji,
architektura i...
Temat: formatowanie elementów dopisanych przez Ajax
Maciej Filipiak:
nawias źle przepisałem
powinno być tak:
html(html, uruchomsortowanie())
zdaje się, że funkcja .html() nie przyjmuje dwóch parametrów...
Rafał Krupiński .koder
Temat: formatowanie elementów dopisanych przez Ajax
Piotr L.:
Maciej Filipiak:
nawias źle przepisałem
powinno być tak:
html(html, uruchomsortowanie())
zdaje się, że funkcja .html() nie przyjmuje dwóch parametrów...
No co Ty - bierze dowolną liczbę parametrów... ale wykorzystuje tylko ten pierwszy :D
