Witajcie.
Proszę o pomoc, co jest nie tak z poniższym skryptem.
W konsoli pokazuje OK, ale POST user_login_test nie przechodzi
$('#input_login').keypress(function UserNameConfirm() { var InputLogin = document.getElementById("input_login").oninput = function() { InputLogin = this.value }; $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_login", user_login_test : InputLogin }, success : function(ret) { /* if (ret == 1) { console.log( "Dane zwrotne OK: " + InputLogin ); } if (ret == 0) { console.log(ret); console.log( "Dane zwrotne NIE OK: " + InputLogin ); } */ console.log( InputLogin ); console.log(ret); } });
A co to za potworek?
var InputLogin = document.getElementById("input_login").oninput = function() { InputLogin = this.value };
no bo jak tego nie zrobię to w konsoli owszem pokazuje się to co jest wpisane w input ale bez ostatniego znaku
A po co w ogóle przechowujesz wartość tego pola tekstowego w zmiennej? Nie możesz go na bieżąco odczytywać tam, gdzie jest potrzebny? Pamiętaj, że AJAX działa asynchronicznie i może dłużej trwać niż wpisywanie poszczególnych znaków. Najlepiej jak zwrócisz login jako część response po stronie serwera i na tej podstawie będziesz wiedział czego dotyczyła odpowiedź.
poprawiłem
$('#input_login').keypress(function UserNameConfirm() { document.getElementById("input_login").oninput = function() { var topcio = this.value; $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_login", user_login_test : topcio }, success : function(ret) { /* if (ret == 1) { console.log( "Dane zwrotne OK: " + InputLogin ); } if (ret == 0) { console.log(ret); console.log( "Dane zwrotne NIE OK: " + InputLogin ); } */ console.log( topcio ); console.log(ret); } }); }; });
Jest lepiej, ale dalej są tu koszmarki Nie rozumiem po co teraz masz jedno zdarzenie wewnątrz drugiego. Wyrzuć kompletnie to przypisywanie do zmiennej topcio. Nie potrzebujesz jej, topciu Ta zmienna w momencie przyjścia odpowiedzi i tak nie musi wcale mieć prawidłowej wartości. Rozumiem Twój tok myślenia. Pewnie wydaje Ci się, że zmienna będzie pamiętała wartość pola z momentu wysłania requestu AJAX-owego. Niestety tak to nie działa i zmienna zostanie odczytana z aktualną wartością tak czy siak. Czyli jest po prostu zbędna, a wartość zmiennej z momentu wysłania requesta AJAX-owego odczytaj tak:
1. Wyślij request AJAX-em tak jak teraz.
2. Do odpowiedzi serwera dołącz informację o loginie.
3. W funkcji obsługującej odpowiedź na AJAX, użyj sobie loginu z odpowiedzi.
To najbardziej sensowny sposób, żeby wiedzieć jaki był stan pola tekstowego dla danej odpowiedzi. Jeszcze prościej byłoby odczytać dane wejściowe z obiektu XHR dla odpowiedzi, ale nie jestem pewien czy one tam są, chyba niestety nie.
No OK, ale co mam wysłać AJAXEM do "../php_function/set_session_variable.php", skoro to ma sprawdzić czy istnieje login wpisany aktualnie w pole input. To AJAX ma się zapytać serwer czy istnieje login, a nie serwer AJAXa.
Chyba że źle rozumuję.
plik php wygląda tak
if ($_POST['ajax_test'] == 'check_user_login') { if ($users->search_for_user( $_POST ) == true) { http://www.php.net/echo 1; } else { http://www.php.net/echo 0; } }
document.getElementById("input_login").oninput = function() { $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_login", user_login : this.value }, success : function(ret) { if (ret == 1) { console.log( "Dane zwrotne OK: " + this.value ); } if (ret == 0) { console.log( "Dane zwrotne NIE OK: " + this.value ); } } }); };
No właśnie cały trik polega na tym, że wysyłasz login do serwera, ale serwer też zwraca między innymi ten login! Zobacz, tak mogłaby wyglądać przykładowa odpowiedź serwera:
{ "login": "topcio", "exists": true }
a powiedz mi czym to co napisałem wcześniej różni się od tego
document.getElementById("input_login").oninput = function() { request_01 = ""; request_01 = new XMLHttpRequest(); var post = "ajax_test=check_user_login&user_login=" + this.value; var url = "../php_function/set_session_variable.php"; request_01.onreadystatechange = CheckLoginRequest; request_01.open("POST", url, true); request_01.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request_01.send(post); }; function CheckLoginRequest() { if (request_01.readyState == 4 && request_01.status == 200) { var image = document.getElementById('image_login'); if (request_01.responseText == 1) { $(image).addClass('green'); console.log( "Dane zwrotne OK: " + this.value ); } if (request_01.responseText == 0) { $(image).removeClass('green'); console.log( "Dane zwrotne NIE OK: " + this.value ); } } };
Głównie tym, że to jest surowy JavaScript, a to Twoje to jQuery. Sam schemat działania bardzo podobny i popełnia ten sam błąd - zakłada, że w momencie przyjścia odpowiedzi, stan pola tekstowego się nie zmienił.
OK, wielkie dzięki za pomoc.
Jutro będę kminił jak zrobić to co napisałeś bym zrobił dziś już nie mam siły, oczy mi odmawiają posłuszeństwa.
No to dobranoc i daj jutro znać jak idzie. Ja coś nie mogę się zmusić do spania dzisiaj
Jeszcze nie kminiłem, dopiero usiadłem. Wolna niedziela
Ale usiadłem i do tego co już miałem dopisałem co poniżej.
Pomijając fakt o którym pisałeś wcześniej, czy to jest OK, czy masło maślane. Choć działa
Może da się to jakoś uprościć.
document.getElementById("input_login").oninput = function() { var image = document.getElementById('image_login'); $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_login", user_login : this.value }, success : function(ret) { if (ret == 1) { $(image).addClass('green'); var image2 = document.getElementById('image_pass'); $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_pass", user_pass : document.getElementById("input_pass").value, user_login : document.getElementById("input_login").value }, success : function(ret01) { if (ret01 == 1) { $(image2).addClass('green'); } if (ret01 == 0) { $(image2).removeClass('green'); } } }); } if (ret == 0) { $(image).removeClass('green'); var image2 = document.getElementById('image_pass'); $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_pass", user_pass : document.getElementById("input_pass").value, user_login : document.getElementById("input_login").value }, success : function(ret01) { if (ret01 == 1) { $(image2).addClass('green'); } if (ret01 == 0) { $(image2).removeClass('green'); } } }); }; } }); }; document.getElementById("input_pass").oninput = function() { var image = document.getElementById('image_pass'); $.ajax({ type : "POST", url : "../php_function/set_session_variable.php", data : { ajax_test : "check_user_pass", user_pass : this.value, user_login : document.getElementById("input_login").value }, success : function(ret) { if (ret == 1) { $(image).addClass('green'); } if (ret == 0) { $(image).removeClass('green'); } } }); };
Nie sądzisz, że sprawdzanie poprawności hasła podczas jego wpisywania jest dość egzotycznym pomysłem?
Jest i owszem, ale jak pisałem wcześniej dopiero się tym bawię i oswajam w ogóle z JS.
Ale fajnie to wygląda
Po za tym, wiesz chyba nic to nie zmienia, bo jak ktoś nie zna loginu ani hasła, to cę będzie siedział w panelu i się bawił w literki.
Chyba żaden bot linuxowy tego nie odczyta bo nie obsłuży JSa, chyba że się mylę
Można to znacząco uprościć. Zobacz sobie na przykład $.post zamiast $.ajax.
no właśnie czym to się różni, bo już się $.post bawiłem, mam na przykład takie coś
$.post('../php_function/set_session_variable.php', { ajax_test: 'back_to_login_page'}, function(ret) { if (ret == 0) { window.location = "../index.php"; } else{ window.alert("error!"); }
Różni się tym, że jest bardziej czytelna dla zapytań POST. Jest też $.get. Ja używam $.ajax tylko wtedy, gdy chcę ustawić sporo rzeczy sam, albo kiedy zapytanie musi obsługiwać różne metody HTTP.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)