Reklama: Wysokie zyski z Twojej strony www , DOŁĄCZ DO NAS

Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

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
20.09.2011, 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 :-)
20.09.2011, 14:28

Maciej Filipiak właściciel,
VizMedia

Temat: formatowanie elementów dopisanych przez Ajax

Wielkie dzięki Szymonie ! Chyba o to chodziło - jutro przetestuje.
20.09.2011, 22:36

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
21.09.2011, 10:09

Bartosz Ratajczyk Specjalista ds.
Operacji, TP SA

Temat: formatowanie elementów dopisanych przez Ajax

Piotr L.:
a nie lepiej to: http://api.jquery.com/ajaxComplete/ ??

To może jeszcze lepiej: wykorzystać Deffered Object
http://api.jquery.com/category/deferred-object/
a konkretniej http://api.jquery.com/deferred.done/ lub konstrukcji $.when('plik.php').then(function() {...})
Maciej Filipiak:
Mnie zastanawia dlaczego funkcja uruchomsortowanie() nie działa jak powinna. Możesz pokazać jej kod?
21.09.2011, 12:31

Maciej Filipiak właściciel,
VizMedia

Temat: formatowanie elementów dopisanych przez Ajax

w uruchomsortowanie() jest poprostu

$("#myTable").tablesorter();
21.09.2011, 16:33

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?
22.09.2011, 21:45

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
30.09.2011, 10:29

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
30.09.2011, 23:23

Bartosz Ratajczyk Specjalista ds.
Operacji, TP SA

Temat: formatowanie elementów dopisanych przez Ajax

a jeszcze ten kawałek:

success: function(html){$("#divTable").html(html), uruchomsortowanie() }

Tam rzeczywiście jest przecinek a nie średnik?
1.10.2011, 10:00

Maciej Filipiak właściciel,
VizMedia

Temat: formatowanie elementów dopisanych przez Ajax

nawias źle przepisałem
powinno być tak:

html(html, uruchomsortowanie())
3.10.2011, 09:09

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...
3.10.2011, 09:12

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
3.10.2011, 10:00



Wyślij zaproszenie do