function handle_check3()
{
if((ajax.readyState==4)&&(ajax.status==200))
{
rezult = ajax.responseText;
alert('Rezultat w handlecheck' + rezult);
}
}
//--------------------------
function katal_add(vkatalog)
{
if(ajax)
{
ajax.open('post', 'ajax.php?s=katal_add');
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
ajax.send("nazwa=" + encodeURIComponent(vkatalog) + "&priv=1&haslo=");
ajax.onreadystatechange = handle_check3;
alert('Rezultat: '+rezult);
if((rezult != 0) || (rezult != NULL)){
document.nowy_kod_frm.katalog.options[document.nowy_kod_frm.katalog.options.length] = new Option(vkatalog, rezult, false, true);
alert('nowa pozycja aaaaaaaaaaaaaaaaaaaaaaa');
} else {
alert('nim0');
}
}
}
Mam sobie taki o to JS. Działa to tak.
User wchodzi na stronę, ma listę wyboru. Obok przycisk dodaj, który wywołuje funkcję katal_add
Następnie przesyłane postem zmienne do pliku ajax.php tworzą nową pozycję w bazie danych. Dalej zaczynają się schody.
Chciałbym by pole wyboru po dodaniu wartości do bazy przytyło również o nowy rekord.
Plik ajax.php zwraca 0 dla niepowodzenia lub ID nowego rekordu i funkcja handle_check3 powinna ją przypisać do zmienne rezult, która następnie zostaje przetworzona w warunku w katal_add, tak niestety się nie dzieje.
Teraz tak:
rezultat w funkcji handle_check3 jest poprawny(wyświetla ID katalogu), ale już alert w funkcji katal_add() wyświetla undefined. No i po dodaniu do bazy danych ID jest 0.
Teraz wiem, że funkcja onreadystatechange wykona się dopiero po zmianie statusu żądania, więc nie będzie "czekać" na przypisanie wartości do zmiennej, tylko "pójdzie" dalej.
Próbowałem jakoś uruchomić synchronicznie:
ajax.open('post', 'ajax.php?s=katal_add', false);
Ale też nic nie daje. W jaki sposób mogę sprawić, żeby dopiero po przypisaniu zmiennej wykonała się dalsza część skryptu.
Pzdr