Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] .post w tablicy nie aktualizuje stringa
Forum PHP.pl > Forum > Przedszkole
elbroth
Cześć, mam taki kod, zmienna route powinna być zlepkiem kilku stringów. Co robię źle? Po stronie PHP wszystko działa poprawie, jest zwracany dobry JSON.


[JAVASCRIPT] pobierz, plaintext
  1. $('#getAllBuses').submit(function() { // catch the form's submit event
  2. $.ajax({ // create an AJAX call...
  3. data: $(this).serialize(), // get the form data
  4. type: $(this).attr('method'), // GET or POST
  5. url: $(this).attr('action'), // the file to call
  6. success: function(response) { // on success..
  7. var results = jQuery.parseJSON(response);
  8.  
  9. $('#buses').html("Wszystkie autobusy:");
  10. $(results).each(function(key, value) {
  11. var keyword = value.name;
  12. var route = '';
  13. $.post("app.php?action=getRoute", {city: keyword})
  14. .done(function (data) {
  15. var routes = jQuery.parseJSON(data);
  16. $(routes).each(function (key, value) {
  17. route += value.city;
  18. });
  19. });
  20. $('#buses').append('<p><b>' + value.departure + '</b> - <b>' + value.name +'</b> do <b>' + value.last_stop +'</b> (przez: ' + route + ')').html();
  21.  
  22. });
  23. }
  24. });
  25. return false; // cancel original event to prevent form submitting
  26. });
[JAVASCRIPT] pobierz, plaintext
trueblue
Używasz zmiennej route zanim została sklejona (sklejana jest w metodzie done).
elbroth
W JS zaczynam dopiero raczkować, więc nie wiem, jak to poprawić. Jeśli usunę deklarację zmiennej z linii 12, dostaję wtedy błąd JS "route is not defined". Tak samo gdy dodam ją między 15 a 16 linią.
markuz
Funkcja w done wykona się PÓŹNIEJ niż $('#buses').append() co za tym idzie, w append wstawiasz route która jest pusta. Wstaw $('#buses').append(...) na końcu w funkcji done();
elbroth
Okej, poprawione, wszystko działa tak jak powinno.

Dzięki bardzo wink.gif

EDIT - jednak nie do końca tak, jak powinno.

Moje zapytanie wygląda tak:
  1. $sql = "SELECT * FROM `bus` ORDER BY `departure` ASC";


A mimo to wyniki z JS nie sa posortowane, za każdym razem wyświetlają się inaczej, na przykład:
  1. Wszystkie autobusy:
  2. 13:30 - Autobus do Zakopane (przez: Wrocław, Warszawa, Wałbrzych, Gdańsk)
  3.  
  4. 01:23 - PKS do Sanok (przez: Szczecin, Warszawa, Wałbrzych, Gdańsk)
  5.  
  6. 09:44 - Kolejny autobus do Wrocław (przez: Hel, Warszawa, Wałbrzych, Gdańsk)
  7.  
  8. 06:30 - Test do Szczecin (przez: Katowice, Warszawa, Wałbrzych, Gdańsk)
  9.  
  10. 18:33 - Kolejny do Katowice (przez: Sanok, Warszawa, Wałbrzych, Gdańsk)
viking
A co masz wewnątrz data czyli console.log(data); - dopisane do done?

Przy okazji warto żebyś zrozumiał deferred bo bez tego będzie ciężko. Całkiem fajnie opisane https://medium.freecodecamp.com/javascript-...2573#.v7at80j3k
oraz różnice w jquery 3 w stosunku do poprzednich https://jquery.com/upgrade-guide/3.0/#deferred
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.