Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> AJAX pod nowoczesnymi przeglądarkami, Po prostu - skrypt nie działa.
Hazel
post
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:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. <script type="text/javascript" src="001.js"></script>
  3. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  4. <title>Wysyłanie danych</title>
  5. </head>
  6. <h3>Kilka informacji o użytkowniku...</h3>
  7. <form onsubmit="sendData();return false">
  8. <p>Imię: <input type="text" name="firstname" size="20"></p>
  9. <p>Nazwisko: <input type="text" name="lastname" size="20"> </p>
  10. <p>Płeć: <input type="text" name="gender" size="2"> </p>
  11. <p>Kraj pochodzenia: <input type="text" name="country" size="20"> </p>
  12. <p><button type="submit">Wyślij dane</button></p>
  13. </form>
  14. </body>
  15. </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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 20:38