JQuery ajax dynamiczne kontrolki

0

Cześć,

Ajaxem pobieram kilka parametrów i na ich postawie buduję zawartość div. Wykonuje się to asynchronicznie, jak potem mogę to dodać do kontrolki o id zadanym "test + index" Próbowałem na końcu success dodać $("#test-"+index).append($div) ale nie działa.

function divFormatter(index, row) {
$div = $("<div>", { id :"test-"+index });
$.ajax({
	type : 'GET',
	url : ....,
	dataType : "json",
//	async : false,
	success : function(response) {
	    $.each(response, function(i, item) {
		$div.append('</div>..</div>');			
	    });
	}
});
return $div;
}
0

$div.append('</div>..</div>'); - zapomniałeś otworzyć, za to dwa razy zamykasz tag.
$div jest gdzieś poza podaną funkcją dodawany do DOM?

0

Podczas skracania tekstu w append wkradła się pomyłka.

Nie, $div jest tylko wewnątrz tej funkcji.

0

Dzieje się tu bardzo dużo dziwnych, nieprzewidywalnych rzeczy. Po pierwsze $div ma zasięg poza funkcją i nie bardzo wiadomo czemu (brakuje var). Po drugie $div zwracany to wcale nie jest ten div który może Ci się wydawać. Funkcja nie czeka ze zwróceniem wartości na Twój ajax, więc jak gdzieś to przypisujesz to masz tego div'a co na początktu. Poza tym te tagi.. Spróbuj wykorzystać jquery promise.

Następnym razem spróbuj troche podebuggować (np. do którego momentu jest ok, czy możemy być pewni zwraca Ci dobry response, ale w for eachu się coś dzieje itd), bo "ale nie działa" nie mówi za dużo, bo potencjalnie wszystko może być nie tak.

1

Jeśli nie dodajesz zwracanego $div do DOM, to gdzie spodziewasz się zobaczyć wynik?
Po co zwracasz element, z którego na zewnątrz nie korzystasz?

@Desu: to, że funkcja zwraca obiekt jQuery opakowujący obiekt DOM to normalna sprawa. Nie byłbym taki pewien, że zwracany jest nie ten div co trzeba, o ile tylko kod wywołujący funkcję divFormatter (BTW fatalna nazwa!) pilnuje, żeby odpowiednio obsłużyć zwracany wynik. A asynchroniczność nie ma nic do rzeczy, przecież zwracany element nie jest tworzony asynchronicznie, w ten sposób są dodawane do niego dzieci, ale nie ma w tym nic nieprawidłowego, dodadzą się i wyświetlą prawidłowo, o ile tylko rodzic będzie obecny w DOM.

[edit]
@Desu - w sumie racja co do niezwracania tego elementu, co trzeba, brakuje var, przez co zmienna $div jest globalna, a to może prowadzić do bardzo głęboko ukrytych błędów. Może, ale nie musi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1