Cytat(nevt @ 27.01.2008, 12:04:57 )

w ten sposób w jaki próbujesz - nie da sie. wynika to ze sposobu działania AJAX'a. funkcja, która podstawiasz do
onreadystatechange wywołuje się dopiero PO otrzymaniu odpowiedzi z serwera... a zanim to nastąpi, twoja funkcja checkLogin() dawno już skończy swoje działanie... proponuję, żebyś zamiast takiej konstrukcji zdefiniował sobie dodatkową funkcję, np. loginAnswer(login_ok){...} i wywoływał ją tam gdzie teraz ustawiasz login_ok, czyli:
Kod
// wewnątrz checkLogin(), zamiast
login_ok = 1;
// wpisujesz
loginAnswer(1);
// i definiujesz sobie funkcję
function loginAnswer(login_ok)
{
// i tutaj wpisujesz kod, zalezny od tego czy serwer potewierdził login czy nie...
}
można to zrobić na różne sposoby, ale tak jak proponuję nie będziesz miał zbyt wielu zmian w swoim kodzie... powodzenia.
Dzieki za pomoc, tylko ze moj problem polega na tym ze ja potrzebuje wlasnie ten login_ok urzyc w innej funckcji.
PO prostu chodzi o to zeby funkcja ktora rejestruje (tez w ajaxie) po nacisnieciu przycisku wyslij, nie sprawdzala drugi raz czy login jest wolny, ale wlasnie wziela te informacje z check_login, wkleje tutaj jeszcze tę funkcje rejestrującą.
function registration(){
var lo_ok = checkLogin();
var error = false;
var url = "http://www.hyipek2.yoyo.pl/ajax.php?rejestracja=tak&";
var login = document.getElementById("login").value;
var pass = document.getElementById("pass").value;
var email = document.getElementById("email").value;
var okno = document.getElementById("error");
var close = "
<div align='right' valign='bottom'><a href='javascript: void(\"0\");' onClick=\"closeWindow();\">Zamknij
</a></div>";
var closeMove = "
<div align='right' valign='bottom'><a href='javascript: void(\"0\");' onClick=\"closeWindowMove();\">Zamknij
</a></div>";
if(email.length == 0){
okno.style.display = "block";
error = true;
}
if(pass.length == 0){
okno.style.display = "block";
error = true;
}
if(login.length == 0){
okno.style.display = "block";
error = true;
}
if (lo_ok != 1){
okno.style.display = "block";
okno.innerHTML = "
<center>Podany login jest niepoprawny.
<br></center>"+ log_ok + close;
error = true;
}
if(error == false){
var http = getHTTPObject();
http.open("GET", url + "rlogin=" + escape(login) + "&pass=" + escape(pass) + "&email=" + escape(email), true);
http.onreadystatechange = function() {
if (http.readyState != 4) {
okno.style.display = "block";
} else {
var numer = parseInt(http.responseText);
if(numer == 0){
okno.innerHTML = "
<center>Zarejestrowano pomyslnie !
<br></center>" + closeMove;
}else {
okno.innerHTML = "
<center>Blad rejestracji, sprobuj ponownie.
<br></center>" + close;
}
}
}
http.send(null);
}
}
Cytat(lord_t @ 27.01.2008, 12:08:22 )

Ten login_ok jest zwracany przez tę funkcję wewnętrzną. A nie przez checkLogin(). Dlatego zawsze zwróci undefined - bo 'nic' nie zwraca i to 'nic' chcesz przypisac do zmiennej lo_ok.
Musiałbyś return z login_ok przenieść przed ostatni nawias klamrowy.
Próbowałem tak, ale wtedy miałem bład ze login_ok nie zdefiniowana, bo byla definiowana w tej wewnetrznej funkcji, z kolei jak zdefiniowalem w funkcji zewnetrznej, to ta wewnetrzna jej nie zmieniala, i caly czas byla taka jak zdefiniowalem.
mimo to dzieki;)