Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> AJAX POST, Aktualne dane z pola input
topcio
post
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


Witajcie.

Proszę o pomoc, co jest nie tak z poniższym skryptem.
W konsoli pokazuje OK, ale POST user_login_test nie przechodzi

  1. $('#input_login').keypress(function UserNameConfirm() {
  2. var InputLogin = document.getElementById("input_login").oninput = function() {
  3. InputLogin = this.value
  4. };
  5.  
  6. $.ajax({
  7. type : "POST",
  8. url : "../php_function/set_session_variable.php",
  9. data : {
  10. ajax_test : "check_user_login",
  11. user_login_test : InputLogin
  12. },
  13. success : function(ret) {
  14.  
  15. /*
  16. if (ret == 1) {
  17. console.log( "Dane zwrotne OK: " + InputLogin );
  18. }
  19. if (ret == 0) {
  20. console.log(ret);
  21. console.log( "Dane zwrotne NIE OK: " + InputLogin );
  22. }
  23.  
  24. */
  25. console.log( InputLogin );
  26. console.log(ret);
  27. }
  28.  
  29. });
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


A co to za potworek?

[JAVASCRIPT] pobierz, plaintext
  1. var InputLogin = document.getElementById("input_login").oninput = function() {
  2. InputLogin = this.value
  3. };
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
topcio
post
Post #3





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


no bo jak tego nie zrobię to w konsoli owszem pokazuje się to co jest wpisane w input ale bez ostatniego znaku
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ź.
Go to the top of the page
+Quote Post
topcio
post
Post #5





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


poprawiłem (IMG:style_emoticons/default/smile.gif)
  1. $('#input_login').keypress(function UserNameConfirm() {
  2. document.getElementById("input_login").oninput = function() {
  3. var topcio = this.value;
  4.  
  5.  
  6. $.ajax({
  7. type : "POST",
  8. url : "../php_function/set_session_variable.php",
  9. data : {
  10. ajax_test : "check_user_login",
  11. user_login_test : topcio
  12. },
  13. success : function(ret) {
  14.  
  15. /*
  16. if (ret == 1) {
  17. console.log( "Dane zwrotne OK: " + InputLogin );
  18. }
  19. if (ret == 0) {
  20. console.log(ret);
  21. console.log( "Dane zwrotne NIE OK: " + InputLogin );
  22. }
  23.  
  24. */
  25. console.log( topcio );
  26. console.log(ret);
  27. }
  28.  
  29. });
  30.  
  31. };
  32.  
  33. });
  34.  


Masz rację w tym co piszesz.
To są moje początki z AJAX i tak sobie próbuję różnych rzeczy


to co piszę teraz to chciałem by ajax sprawdzał w bazie czy istnieje dany login, a jak tak to zmienił się div na inny
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jest lepiej, ale dalej są tu koszmarki (IMG:style_emoticons/default/smile.gif) Nie rozumiem po co teraz masz jedno zdarzenie wewnątrz drugiego. Wyrzuć kompletnie to przypisywanie do zmiennej topcio. Nie potrzebujesz jej, topciu (IMG:style_emoticons/default/smile.gif) 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.
Go to the top of the page
+Quote Post
topcio
post
Post #7





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


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
  1. if ($_POST['ajax_test'] == 'check_user_login') {
  2. if ($users->search_for_user( $_POST ) == true) {
  3. echo 1;
  4. }
  5. else {
  6. echo 0;
  7. }
  8. }


już zakumałem
teraz jest tak

  1. document.getElementById("input_login").oninput = function() {
  2. $.ajax({
  3. type : "POST",
  4. url : "../php_function/set_session_variable.php",
  5. data : {
  6. ajax_test : "check_user_login",
  7. user_login : this.value
  8. },
  9. success : function(ret) {
  10. if (ret == 1) {
  11. console.log( "Dane zwrotne OK: " + this.value );
  12. }
  13. if (ret == 0) {
  14. console.log( "Dane zwrotne NIE OK: " + this.value );
  15. }
  16. }
  17. });
  18. };
  19.  
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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:

[JAVASCRIPT] pobierz, plaintext
  1. {
  2. "login": "topcio",
  3. "exists": true
  4. }
[JAVASCRIPT] pobierz, plaintext


Ważne jest to, żeby zrozumieć jedną rzecz. Teoretycznie nawet jeśli wysyłasz do serwera na przykład najpierw prośbę o sprawdzenie loginu "topci", a za ułamek sekundy "topcio", to serwer może odpowiedzieć w odwrotnej kolejności i musisz być na to przygotowany. Dlatego trzeba wiedzieć czego dana odpowiedź dotyczy. Inaczej narazisz się na nieprawidłową interpretację wyniku.

Ten post edytował SmokAnalog 10.12.2017, 02:03:01
Go to the top of the page
+Quote Post
topcio
post
Post #9





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


a powiedz mi czym to co napisałem wcześniej różni się od tego

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. document.getElementById("input_login").oninput = function() {
  3. request_01 = "";
  4. request_01 = new XMLHttpRequest();
  5. var post = "ajax_test=check_user_login&user_login=" + this.value;
  6. var url = "../php_function/set_session_variable.php";
  7. request_01.onreadystatechange = CheckLoginRequest;
  8. request_01.open("POST", url, true);
  9. request_01.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  10. request_01.send(post);
  11. };
  12.  
  13. function CheckLoginRequest() {
  14. if (request_01.readyState == 4 && request_01.status == 200) {
  15. var image = document.getElementById('image_login');
  16. if (request_01.responseText == 1) {
  17. $(image).addClass('green');
  18. console.log( "Dane zwrotne OK: " + this.value );
  19. }
  20. if (request_01.responseText == 0) {
  21. $(image).removeClass('green');
  22. console.log( "Dane zwrotne NIE OK: " + this.value );
  23. }
  24. }
  25. };
[JAVASCRIPT] pobierz, plaintext


Ten post edytował topcio 10.12.2017, 02:23:23
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #10





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ł.
Go to the top of the page
+Quote Post
topcio
post
Post #11





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


OK, wielkie dzięki za pomoc.
Jutro będę kminił jak zrobić to co napisałeś bym zrobił (IMG:style_emoticons/default/tongue.gif) dziś już nie mam siły, oczy mi odmawiają posłuszeństwa.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #12





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


No to dobranoc i daj jutro znać jak idzie. Ja coś nie mogę się zmusić do spania dzisiaj (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
topcio
post
Post #13





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


Jeszcze nie kminiłem, dopiero usiadłem. Wolna niedziela (IMG:style_emoticons/default/biggrin.gif)
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 (IMG:style_emoticons/default/tongue.gif)
Może da się to jakoś uprościć.


[JAVASCRIPT] pobierz, plaintext
  1. document.getElementById("input_login").oninput = function() {
  2. var image = document.getElementById('image_login');
  3. $.ajax({
  4. type : "POST",
  5. url : "../php_function/set_session_variable.php",
  6. data : {
  7. ajax_test : "check_user_login",
  8. user_login : this.value
  9. },
  10. success : function(ret) {
  11. if (ret == 1) {
  12. $(image).addClass('green');
  13. var image2 = document.getElementById('image_pass');
  14. $.ajax({
  15. type : "POST",
  16. url : "../php_function/set_session_variable.php",
  17. data : {
  18. ajax_test : "check_user_pass",
  19. user_pass : document.getElementById("input_pass").value,
  20. user_login : document.getElementById("input_login").value
  21. },
  22. success : function(ret01) {
  23. if (ret01 == 1) {
  24. $(image2).addClass('green');
  25. }
  26. if (ret01 == 0) {
  27. $(image2).removeClass('green');
  28. }
  29. }
  30. });
  31. }
  32. if (ret == 0) {
  33. $(image).removeClass('green');
  34. var image2 = document.getElementById('image_pass');
  35. $.ajax({
  36. type : "POST",
  37. url : "../php_function/set_session_variable.php",
  38. data : {
  39. ajax_test : "check_user_pass",
  40. user_pass : document.getElementById("input_pass").value,
  41. user_login : document.getElementById("input_login").value
  42. },
  43. success : function(ret01) {
  44. if (ret01 == 1) {
  45. $(image2).addClass('green');
  46. }
  47. if (ret01 == 0) {
  48. $(image2).removeClass('green');
  49. }
  50. }
  51. });
  52. };
  53. }
  54. });
  55. };
  56.  
  57. document.getElementById("input_pass").oninput = function() {
  58. var image = document.getElementById('image_pass');
  59. $.ajax({
  60. type : "POST",
  61. url : "../php_function/set_session_variable.php",
  62. data : {
  63. ajax_test : "check_user_pass",
  64. user_pass : this.value,
  65. user_login : document.getElementById("input_login").value
  66. },
  67. success : function(ret) {
  68. if (ret == 1) {
  69. $(image).addClass('green');
  70. }
  71. if (ret == 0) {
  72. $(image).removeClass('green');
  73. }
  74. }
  75. });
  76. };
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #14





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Nie sądzisz, że sprawdzanie poprawności hasła podczas jego wpisywania jest dość egzotycznym pomysłem? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
topcio
post
Post #15





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/tongue.gif)
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ę

Ten post edytował topcio 10.12.2017, 18:18:35
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #16





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Można to znacząco uprościć. Zobacz sobie na przykład $.post zamiast $.ajax.
Go to the top of the page
+Quote Post
topcio
post
Post #17





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

Ostrzeżenie: (0%)
-----


no właśnie czym to się różni, bo już się $.post bawiłem, mam na przykład takie coś
[JAVASCRIPT] pobierz, plaintext
  1. $.post('../php_function/set_session_variable.php', { ajax_test: 'back_to_login_page'}, function(ret) {
  2. if (ret == 0) {
  3. window.location = "../index.php";
  4. }
  5. else{
  6. window.alert("error!");
  7. }
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #18





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:17