![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie znam się na ajaxie, a chciałbym się poznać, bo jest przydatny, dlatego napisałem sobie z pomocą Google krótką "aplikację" ajaxową. I działa pod IE , natomiast pod nowoczesnymi przeglądarkami - nie działa. Testowałem w Operze, Flocku, Firefoxie, Safari. Tylko IE reaguje prawidłowo.
No to najpierw kod. 001.html: To jest kod HTML. W IE działa, jak już pisałem (po zmianie zdarzenia z onsubmit formularza na onclick buttona wysyłającego oczywiście). Kod 001.js: Kod /* Funkcja opakowująca do skonstruowania obiektu żądania. Parametry: reqType: typ żądania HTTP, na przykład GET lub POST. url: adres URL programu serwerowego. asynch: czy żądanie będzie wysłane asynchronicznie, czy też nie. */ function httpRequest(reqType,url,asynch){ // Przeglądarki na bazie Mozilli. if(window.XMLHttpRequest){ request = new XMLHttpRequest(); } else if (window.ActiveXObject){ request=new ActiveXObject("Msxml2.XMLHTTP"); if (! request){ request=new ActiveXObject("Microsoft.XMLHTTP"); } } // Jeżeli nie powiodła się nawet inicjalizacja ActiveXObject, // wówczas żądanie wciąż może być typu null. if(request){ initReq(reqType,url,asynch); } else { alert("Używana przeglądarka nie pozwala na wykorzystanie "+ "wszystkich funkcji tej aplikacji!"); } } /* Inicjalizacja obiektu żądania, który został już skonstruowany. */ function initReq(reqType,url,bool){ /* Określamy funkcję, która będzie obsługiwała odpowiedź HTTP. */ request.onreadystatechange=handleResponse; request.open(reqType,url,bool); request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); request.send(queryString); } function setQueryString(){ queryString=""; var frm = document.forms[0]; var numberElements = frm.elements.length; for (var i = 0; i < numberElements; i++) { if(i < numberElements-1) { queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&"; } else { queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value); } } } var request; var queryString; function sendData(){ setQueryString(); var url="001.xml"; httpRequest("POST",url,true); alert("a"); } // Obsługa zdarzeń dla XMLHttpRequest function handleResponse(){ if(request.readyState == 4){ if(request.status == 200){ alert(request.responseText); } else { alert("Wystąpił problem z komuinkacją między obiektem XMLHttpRequest, a programem serwera."); } } // Koniec zewnętrznej pętli if. } Plik XML jest zbudowany najzupełniej poprawnie. Widzę to tak: Po kliknięciu buttona wykonuje się funkcja sendData(), która uruchamia SetQueryString(), która to ustawia ciąg postaci firstname=imie&lastname=nazwisko&gender=plec&country=kraj, zależnie od wpisanych danych. Następnie zostaje wykonane żądanie za pomocą httpRequest(). I chyba tutaj coś nie działa, bo za pomocą linijki alert("a"); wstawianej w różnych miejscach kodu doszedłem do tego, że we wszystkich przeglądarkach oprócz IE to tutaj skrypt się wykrusza - alert wstawiony przed tą linią wykonuje się, po tej linii - już nie. Mógłby ktoś pomóc? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Hazel 25.11.2007, 14:37:16 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 187 Pomógł: 6 Dołączył: 31.08.2005 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
dlaczego piszesz:
Kod alert(request.responseText); skoro zwracasz dane XML powinieneś pisać: Kod alert(request.responseXML); To całe alert("a") na moje oko powinno znajdować się w funkcji zwrotnej, gdy wiadomo czy zapytanie zostało wykonane czy też nie. Ten post edytował slammer 27.11.2007, 08:11:32 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Pisałem, że tego alerta wstawiałem w róznych miejscach kodu - a wkleiłem akurat mało reprezentatywną wersję.
Za pomocą tego alerta doszedłem do tego, że poniższy kod: 1. Wyświetla alert o treści "reqType=POST". 2. Wyświetla kolejny alert o treści "url=plik.xml". 3. Wyświetla ostatni alert o treści "bool=true". 4. Alert o treści "a" nie wykonuje się, co wskazuje na błąd w metodzie open. Pod IE też nie dziala (już (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ), przez chwilę działał, ale nie mam pojęcia, co skopałem w kodzie, że znów nie działa. Kod function initReq(reqType,url,bool){ /* Określamy funkcję, która będzie obsługiwała odpowiedź HTTP. */ request.onreadystatechange=handleResponse; alert("reqType=" + reqType); alert("url=" + url); alert("bool=" + bool); request.open(reqType,url,bool); alert("a"); request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); request.send(queryString); } Zatem responseText/responseXML nie ma tutaj żadnego znaczenia, choć teoretycznie niby masz rację. Ten post edytował Hazel 27.11.2007, 19:22:56 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 187 Pomógł: 6 Dołączył: 31.08.2005 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
U mnie działa bez problemów (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:54 |