AJAX zwrócenie wartości

czeski14

Użytkownik
Dołączył
Wrzesień 5, 2010
Posty
7
Witam. Mam funkcję która sprawdza czy w bazie danych został znaleziony użytkownik, próbowałem z niej zwrócić wartość ale wynikiem jest zawsze "undefined", z tego co czytałem na necie to chodzi o tą asynchroniczność. Nie mam pojęcia jak to zrobić, mam nadzieje, że ktoś mi pomoże. Pozdrawiam

FUNKCJA
Kod:
function userExist(){
	var user = createRequest();
	var adres = "user_exist.php?login="+document.getElementById("login").value;
	var ilogin = document.getElementById("ilogin");
	var login = document.getElementById("login");
	
	user.open("GET", adres, true);
	
	user.onreadystatechange = function (){
		if ( user.readyState == 4 && user.status == 200){
			var error = user.respon***ML.getElementsByTagName("error")[0].childNodes[0].nodeValue;
			if ( error == 0 ){
				ilogin.innerHTML = "";
				login.className = "ok";;
			}
			else {
				var dane = user.respon***ML.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
				ilogin.innerHTML = dane;
				login.className = "blad";
			}			
		}
	}
	user.send(null);
}

user_exist.php
PHP:
<?php
	header('Content-type: application/xml; charset="utf-8"');
	echo '<?xml version="1.0" encoding="utf-8"?>';
	
	echo "<ajaxaction>";
	include ("../klasy/users.php");
	$user = new users;
	$user -> getLogin($_GET['login']);
	
	if ( $user -> userExist()){
		echo " <error>0</error></ajaxaction>";
	}
	else {
		echo " <error>1</error><msg>Taki uzytkownik juz istnieje</msg></ajaxaction>";
	}
	
		
?>
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Ściągnij sobie FireBuga i przeanalizuj dokładnie wysyłane i odbierane dane. Może podłapiesz jakieś błędy.
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
polecam użyć jQuery, wtedy całe żądanie można zrobić tak prosto:
Kod:
wyniki.innerHTML+=$.ajax({url:'sprawdz_login.php?login='+escape(login),async:false}).responseText;
 

czeski14

Użytkownik
Dołączył
Wrzesień 5, 2010
Posty
7
Definicja funkcji createRequest działa poprawnie także nie masz Cię co martwić. Problem rozwiązałem tak :
Kod:
function emailExist(uchwyt){
	var email = createRequest();
	var address = "email_exist.php?email="+document.getElementById("email").value;
	var iemail = document.getElementById("iemail");
	var adres = document.getElementById("email");
	
	email.open("GET", address, true);
	email.onreadystatechange = function(){
		if ( email.readyState == 4 && email.status == 200){
			var error = email.respon***ML.getElementsByTagName("error")[0].childNodes[0].nodeValue;
			
			if ( error == 0 ){
				iemail.innerHTML = "";
				adres.className = "ok";
				wynik = true;
				uchwyt(wynik);
			}
			else {
				var dane = email.respon***ML.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
				
				iemail.innerHTML = dane;
				adres.className = "blad";
				wynik = false;
				uchwyt(wynik);
			}
		}
		else if ( email.readyState ==1 ){
			iemail.innerHTML='Sprawdzanie.. <img src="../images/ajax-loader.gif"></img>';
		}
	}
	email.send(null);
}
A wywołanie funkcji wygląda tak :
Kod:
emailExist(function(uchwyt){
			bledy_mai = wynik;
		});

I ten sposób działa ale nie bardzo go rozumiem. Mógłby ktoś go wytłumaczyć?
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
po pierwsze - nikt tu nie jest czarodziejem i nie widzi tego co masz gdzieś tam ukryte w komputerze. albo wsadzasz kompletny kod albo nikt Ci tu dokładnie nie pomoże, bo żeby pomóc, często trzeba kod uruchomić, a żeby to zrobić, trzeba mieć go w całości.
Po drugie, raport z konsoli błędów:
user.respon***ML is null
to znaczy, że nie wiem jak wygląda twój dokument XML (generowany przez user_exist.php), więc fajnie byłoby gdybyś i ten plik tu wrzucił
 
Ostatnia edycja:

czeski14

Użytkownik
Dołączył
Wrzesień 5, 2010
Posty
7
Funkcja createRequest()
Kod:
function createRequest (){
	var req = null;
	
	if ( window.XMLHttpRequest){
		req = new XMLHttpRequest;
	}
	else {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return req;
}

Plik user_exist.php
PHP:
<?php
	header('Content-type: application/xml; charset="utf-8"');
	echo '<?xml version="1.0" encoding="utf-8"?>';
	
	echo "<ajaxaction>";
	include ("../klasy/users.php");
	$user = new users;
	$user -> getLogin($_GET['login']);
	
	if ( $user -> userExist()){
		echo " <error>0</error></ajaxaction>";
	}
	else {
		echo " <error>1</error><msg>Taki uzytkownik juz istnieje</msg></ajaxaction>";
	}
	
		
?>
Mój problem jest rozwiązany tylko nie bardzo rozumiem co robi w poprzednim poście linijka
Kod:
uchwyt(wynik);
Uchwyt to parametr funkcji ale, nie rozumiem czemu wartość parametru jest w nawiasach, to rozwiązanie znalazłem na jakiejś stronie zastosowałem i zadziałało. No i
nie rozumiem, dlaczego w mojej funkcji userExist() musiałem zastosować funkcję bez imienna function(uchwyt)
Kod:
function addEvent(){
	var login = document.getElementById("login");
	login.onblur = function(){
		userExist(function(uchwyt){
			bledy_log = wynik;
		});
	}
}
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
include ("../klasy/users.php");
a ten plik mam sobie wymyślić?

co do tych bezimiennych funkcji, jest to po prostu przekazywanie funkcji jako argument innej funkcji
 
Do góry Bottom