Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][AJAX]Ajax nie zwraca błedu
Forum PHP.pl > Forum > Przedszkole
set4812
Przerobiłem swój stary formularz logowania na ajax . Wszystko fajnie działa tylko przy błędnym wpisywaniu hasła loginu jak mam poinformowac uzytkownika ze cos jest nie tak? Mam dodane .fail ale nie działa tak jakby pomijało kod
Oto mój kod ajax
  1. function getdetails()
  2. {
  3. var name = $('#user').val();
  4. var haslo = $('#pass').val();
  5. var request=$.ajax
  6. ({
  7. type: "POST",
  8. url: "login.php?id=0",
  9. data: {login:name, pass:haslo}
  10. });
  11. request.fail(function() {
  12. alert("test");
  13. });
  14. request.done(function() {
  15. $('#logowanie').load('index.php #logowanie');
  16. });
  17.  
  18. };

Formularz logowania
  1. function logowanie()
  2. {
  3. if(isset($_SESSION["login"]) && $_SESSION["login"]!==0)
  4. {
  5. echo '<div id="logowanie"> Witaj '.$_SESSION['nick'].' na forum';
  6. echo '<br/><a href="login.php?off=1">Wyloguj</a><br/>';
  7. if($_SESSION['power']>0)
  8. {echo '<a href="panel.php">Panel Admina</a>';}
  9. echo '</div>';
  10. }
  11. else
  12. {
  13. $_SESSION["login"]=0;
  14. $_SESSION['power']=0;
  15. ?>
  16. <div id="logowanie">
  17. <font color="red"><B> Login</B></font><input type="text" name="user" size="8" id="user"><br/>
  18. <B><font color="red">Hasło</font></B><input type="password" name="pass" size="8" id="pass"><br/>
  19. <input type="submit" value="Zaloguj" name="przycisk" onClick ="getdetails()">Jeżeli nie posiadasz jeszcze konta <a href="login.php?id=1">zarejestruj się </a></div>'<?php
  20. }
  21. }

Przetwarzanie formularza
  1. function werfikuj(){
  2. $login=$_POST['login'];
  3. $haslo=$_POST['pass'];
  4. $zapytanie= 'Select * from users where login="'.$login.'" and haslo="'.md5($haslo).'"';
  5. $result = $this->db->query($zapytanie);
  6. if($result->num_rows==1) { echo "Zalogowano poprawnie";$row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];}
  7. else { die(json_encode('zly login lub haslo'));}
  8.  
  9.  
  10. }


Ma ktos jakaś koncepcja jak sprawic zeby fail zadziałał jak uzytkownik wprowadzi błedny login i hasło w tej chwili zeruje sie formularz
krzychu0808
Nie wiem czy dobrze przeanalizowałem twój kod ale mi się wydaje że błąd tkwi w .fail o ile dobrze pamiętam to zadziała tylko wtedy kiedy nie uda się uruchomić tego pliku php. Więc musisz z pliku php zwracać sobie wartość false lub true, i w skrypcie wykonać odpowiednią akcje.
set4812
Dałem return 0; i nadal nic sad.gif
Jest jakies inne rozwiazanie na ajax zeby zwrocil blad bledne hasło lub login?
klocu
  1. if($result->num_rows==1) { echo "Zalogowano poprawnie";$row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];}
  2. else { die(json_encode('zly login lub haslo'));}


Brak konsekwencji - raz echo raz json. Raczej zwracaj sobie statusy typu true/false, 0/1, albo inaczej.
I w done obrabiaj sobie akcje - jak odpowiedź pozytywna to przeładuj stronę, jak negatywna to wyczyść formularz, ustaw aktywność pola i wyrzuć jakiś komunikat dla odwiedzającego.

--
Chyba, że jak bardzo upierasz się przy tym rozwiązaniu to jeśli logowanie jest nieprawidłowe odpowiadać kodem błędu 403, a jeśli jest ok to kodem 200. Rozwiązanie zależne od własnych preferencji.
set4812
  1. if($result->num_rows==1) { $row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];
  2. return 1;
  3. }
  4. else { return 0;
  5.  
  6.  
  7. }


Nadal fail nie działa sad.gif
Ma ktoś moze jakis przyklad ktory działa?
krzychu0808
  1. request.done(function(wynik) {
  2. if(wynik == 1) {}
  3. else if(wynik == 0) {}
  4. });


pisane na szybko z głowy sprawdź dokładnie:
http://api.jquery.com/jQuery.ajax/
amii
Tak jak kolega wyżej napisał w skrypcie zwróć ale nie return tylko echo odpowiedni status a później instrukcją warunkową obsłuż to w JS
set4812
Moze ktos mi wytlumaczyc czemu alert(wynik) zwraca mi
  1. <!DOCTYPE html
  2.  
  3. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4.  
  5. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  8.  
  9.  
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  11.  
  12. <link rel="Stylesheet" type="text/css" href="style.css" />
  13.  
  14. <title>Rejestracja</title>
  15.  
  16. <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
  17.  
  18.  
  19. <script type="text/javascript" src="jquery.js">
  20.  
  21.  
  22. </head>
  23.  
  24.  
  25. <br />
  26. <font size='1'><table class='xdebug-error xe-notice xe-scream' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
  27. <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> SCREAM: Error suppression ignored for</th></tr>
  28. <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: id in C:\wamp\www\test\login.php on line <i>28</i></th></tr>
  29. <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
  30. <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
  31. <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>684624</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\test\login.php' bgcolor='#eeeeec'>..\login.php<b>:</b>0</td></tr>
  32. </table></font>
  33. </body>
  34.  
  35. </html>

Dopiero ucze sie ajax i nie rozumiem jeszcze jego w działania.
Dobra juz wiem skad ten html sie bierze zeby sie go pozbyc musze go uciac czy jest jakas inna metoda?
krzychu0808
Zwrócił ci błąd wykonania pliku PHP. Masz błąd w pliku login.php
Notice: Undefined index: id in C:\wamp\www\test\login.php on line 28

I aby nie było problemu możesz sobie dodać:
  1. request.done(function(wynik) {
  2. if(wynik == 1) {}
  3. else if(wynik == 0) {}
  4. else { OBSŁUGA BŁĘDU, JEŻELI WYSTĄPI BŁĄD W WYKONANIU PLIKU PHP } // <<<<<<<<<<<
  5. });
set4812
Krzychu naprawiłem błąd ale on mi nadal zwraca html. Zwraca mi wszystko do body bo po wykonaniu ajax zabijam skrypt . Z tego co wyczytałem Ajax odczytuje wszystko jak idzie a ze moje skrypty wykonuja sie w body to pobiera html do tego miejsca
krzychu0808
Musisz stworzyć sobie osobny plik PHP który będzie zawierał tylko i wyłącznie połączenie z bazą + ta funkcja twoja weryfikacji. Tak aby po wykonaniu programu wyświetliło się 0 lub 1 tylko. Bo ajax po wykonaniu skryptu pobiera treść która się wyświetla i odczytujesz sobie ją w zmiennej wynik.

Tylko może być taka sytuacja że .done zwraca wynik ubrany w html.

Ja to robię tak:
  1. $.ajax({
  2. type: "POST",
  3. url: 'ranking.php',
  4. data: { nick:nick, zdobyte_pkt:zdobyte_pkt },
  5. beforeSend: function (data) {
  6. },
  7. success: function(data) {
  8. if(data == 1) ..............................................
  9. },
  10. error: function(data) { alert("Błąd"); }
  11. });

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.