Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> AJAX POST, Aktualne dane z pola input
topcio
post 10.12.2017, 01:11:33
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 10.12.2017, 01:15:57
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 10.12.2017, 01:20:19
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 10.12.2017, 01:29:32
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 10.12.2017, 01:35:47
Post #5





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

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


poprawiłem 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 10.12.2017, 01:40:48
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 smile.gif Nie rozumiem po co teraz masz jedno zdarzenie wewnątrz drugiego. Wyrzuć kompletnie to przypisywanie do zmiennej topcio. Nie potrzebujesz jej, topciu 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 10.12.2017, 01:59:38
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 10.12.2017, 02:02:09
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 10.12.2017, 02:22:52
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 10.12.2017, 02:28:49
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 10.12.2017, 02:33:04
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ł 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 10.12.2017, 02:37:39
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 biggrin.gif
Go to the top of the page
+Quote Post
topcio
post 10.12.2017, 17:46:24
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 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 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 10.12.2017, 18:12:49
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? smile.gif
Go to the top of the page
+Quote Post
topcio
post 10.12.2017, 18:15:48
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 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 10.12.2017, 18:18:35
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 10.12.2017, 18:44:28
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 10.12.2017, 18:48:32
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 10:23