Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Jak sprawdzić czy skrypt po załadowaniu ajaxa zwraca true?
Forum PHP.pl > Forum > XML, AJAX
deha21
Po kliknięciu na przycisk ajaxa wywołuje mi skrypt php. W nim mam warunki, które mogą zwrócić TRUE albo FALSE. Potrzebuję zrobić tak, że w przypadku gdy zwraca mi TRUE ajax wysyła formularz, a w przypadku FALSE, zwraca wartość którą pokazuje ten pierwszy skrypt (ostrzeżenie). Podam kod:
[JAVASCRIPT] pobierz, plaintext
  1. $("#dodaj").live("click",function(){
  2. var dane=$("#dane").val();
  3. var info = $.ajax({
  4. type:"POST",
  5. url:"skrypt.php",
  6. data:{dane:dane},
  7. success:function(){$("#div").load("skrypt.php")}, //jeśli TRUE
  8. //kod który wykonuje się w przypadku zwrócenia przez skrypt.php FALSE
  9. });
  10. return false;
  11. });
[JAVASCRIPT] pobierz, plaintext
mortus
W tej chwili dwukrotnie wysyłasz żądanie XMLHttpRequest, przy czym jedno metodą POST (realizowane przez metodę .ajax()), a drugie metodą GET (to z kolei realizuje metoda .load()). Jest to trochę bez sensu. Tymczasem dostęp do danych otrzymanych w odpowiedzi serwera możesz uzyskać poprzez callback success, jak poniżej.
[JAVASCRIPT] pobierz, plaintext
  1. $("#dodaj").live("click", function() {
  2. var dane = $("#dane").val();
  3. var info = $.ajax({
  4. type: "POST",
  5. url: "skrypt.php",
  6. data: {
  7. dane: dane
  8. },
  9. success: function(data) {
  10. if(data) {
  11. // tutaj wykonujemy kod, który ma się wykonać, gdy skrypt.php zwróci TRUE
  12. } else {
  13. // a tutaj jeśli zwróci false
  14. }
  15. }
  16. });
  17. return false;
  18. });
[JAVASCRIPT] pobierz, plaintext
deha21
Czyli powinno być coś takiego?
[JAVASCRIPT] pobierz, plaintext
  1. success: function(data) {
  2. if (data) {
  3. alert("Dodano");
  4. } else {
  5. $("#checker").load(data);
  6. }
  7. }
[JAVASCRIPT] pobierz, plaintext

Bo nie działa. Cały czas wywala TRUE, mimo że na 100% jest FALSE.
mortus
Zainstaluj sobie Firebuga pod Firefoxa i włącz zakładkę sieć. Wyślij żądanie i podejrzyj odpowiedź. Skorzystaj z warunku:
[JAVASCRIPT] pobierz, plaintext
  1. if(data == 'TRUE')
[JAVASCRIPT] pobierz, plaintext

bo skrypt.php zapewne zwraca tekst. Do umieszczenia odpowiedzi w kontenerze użyj metody .html(), a nie .load(), bo .load() ponownie wysyła żadanie XMLHttpRequest tyle, że metodą GET. Callback success po tych zmianach powinien wyglądać tak:
[JAVASCRIPT] pobierz, plaintext
  1. success: function(data) {
  2. if (data == 'TRUE') {
  3. alert("Dodano");
  4. } else {
  5. $("#checker").html(data);
  6. }
  7. }
[JAVASCRIPT] pobierz, plaintext
deha21
Dzięki. Musiałem zrobić data=='1'... nie wiem czemu ale działa wink.gif
mortus
Przy pracy z AJAX-em Firebug dla FF (lub odpowiednie narzędzia dla innych przeglądarek) jest rzeczą niezbędną, nie dość, że umożliwia śledzenie skryptów javascript, to jeszcze pozwala na podglądanie żądań i odpowiedzi wysyłanych do i z serwera. Zainstalujesz, to zobaczysz, czy tam rzeczywiście przychodzi w odpowiedzi 1 (która swoją drogą również oznacza prawdę - TRUE).

EDIT:
Taki mały teścik:
  1. echo true;
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.