ďťż
Podstrony
|
telcocafeWitam.var rezult; function handle_check3() { if((ajax.readyState==4)&&(ajax.status==200)) { rezult = ajax.responseText; alert('Marek: ' + 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; //- bedzie potrzebna zmienna do przypisania w h_c3 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. Wyśledziłem, że skrypt odbiera dane z ajax.php ale potem już zachowuje się dziwnie. Konkretnie chodzi o katal_add wyświetla mi się najpierw komunikat Rezultat: undefined a dopiero po nim komunikat z handle_check3: Marek: i tu ID Użytkownik DJ Mentos edytował ten post 12 listopad 2009, 16:09 jQuery nie możesz użyć? Prosto, szybko i skutecznie. Coś mi się nie podoba. Metoda onreadystatechange wykona się dopiero po zmianie statusu żądania, np. po pobraniu danych. Funkcja katal_add() nie będzie czekać, aż AJAX zakończy działanie. Użytkownik Ferrari edytował ten post 12 listopad 2009, 16:42 Racja, wywołania ajaxa są asynchroniczne(jak sama nazwa wskazuje). ajax.onreadystatechange = handle_check3; to oznacza tylko tyle, że dopiero po wystąpieniu redyStateChange zostanie wywołana handle_check3. Funkcja leci dalej i wykonuje następną linijkę(alert('Rezultat: '+rezult);). Rezult jest oczywiście nadal pusty - stąd undefined. A nad jQuery też powinieneś się zastanowić - kod był by krótszy o 1/4 i bardziej czytelny. if (window.XMLHttpRequest) { OAJAX = new XMLHttpRequest(); } else if (window.ActiveXObject) { OAJAX = new ActiveXObject("Microsoft.XMLHTTP"); } function laduj_strone(strona) { var tresc=document.getElementById('tresc'); OAJAX.open("GET", 'http://strona.pl'); OAJAX.onreadystatechange = function() { if (OAJAX.readyState == 4) { tresc.innerHTML=OAJAX.responseText; } if (OAJAX.readyState != 4) { tresc.innerHTML='<center><img src="grafika/waiting.gif" border="0"><br>Ładowanie zawartości - proszę czekać...</center>'; } } OAJAX.send(null); } ja używam takiego czegoś ;-) i działa bez zarzutu w każdej przeglądarce, sprawdza wartość stanu rządania dopiero przy jego zmianie, i wtedy wykonuje określoną funckję ;-) Użytkownik piotr94 edytował ten post 12 listopad 2009, 19:33 No ładne :) To samo w jQuery $('#tresc').html('Ładowanie. Proszę czekać...'); $.get("http://strona.pl", function(data){$('#tresc').html(data);}); Cóż, ja jestem zwolennikiem własnych rozwiązań - bo na stronie na której dynamicznie wykonuję tylko ładowanie treści nie ma moim skromnym zdaniem sensu dołączać całej biblioteki JQuery ;-) ale dla większych projektów, w których na JQuery jest wykonywane więcej operacji jak najbardziej popieram someone |
|||
Sitedesign by AltusUmbrae. |