ďťż

[Ajax] Dwa zapytaniaXML w jednym momencie i problem z kodowaniem

       

Podstrony


telcocafe

Witam.

Mam skrypt Ajaxa(jak poniżej) i przy ładowaniu strony sprawdzam czy użytkownik jest zalogowany(do pliku php i odpowiedź JSON) i pobieram główną treść strony, jednak pojawiają się błędy. Ponieważ pytania są zadane jednocześnie, jak gdyby "nachodzą" na siebie i przez to w odpowiedzi dostaje błędne wartości. Jak zrobić żeby skrypt pobrał jedno zapytanie, później drugie, trzecie .. etc i przechował je gdzieś i czekał aż poprzednie zostanie zrealizowane, później wysyłał następne itd.
?
Siedzę nad tym już dłuższy czas, dlatego bardzo proszę o pomoc!
DZIĘKI!
Ajax={}; Ajax.sendRequest=function(method, url, params, callBack){ this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP"); this.request.onreadystatechange=callBack; if(method=='GET' && params!=null){ url=url+'?'+params; params=null; } this.request.open(method, url, true); this.request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); this.request.send(params); } Ajax.chceckReadyState=function(){ switch(this.request.readyState){ case 0: document.getElementById('ajax').innerHTML='<span class="ajax">Wysyłanie zapytania ...</span>'; break; case 1: document.getElementById('ajax').innerHTML='<span class="ajax">Ładowanie danych</span>'; break; case 2: document.getElementById('ajax').innerHTML='<span class="ajax">Załadowano</span>'; break; case 3: document.getElementById('ajax').innerHTML='<span class="ajax">Gotowy</span>'; break; case 4: document.getElementById('ajax').innerHTML=''; return (this.request.status==200); default: document.getElementById('ajax').innerHTML='<span class="ajax">Wystąpił nieoczekiwany błąd!</span>'; } } Ajax.getResponse=function(){ if(this.request.getResponseHeader('Content-Type').indexOf('xml') != -1){ return this.request.responseXML.documentElement; }else{ return this.request.responseText; } }
Użytkownik blazej_x edytował ten post 21 marzec 2008, 13:23


Kolejka FIFO. Stworzyc tablice z zapytaniami. Gdy chcemy wyslac zadanie sprawdzamy czy obiekt nie jest zajety. Jezeli jest to dodajemy zadanie do tablicy metoda array.push(). Gdy zakonczy sie wykonywanie poprzedniego zadania wyjmujemy pierwsze zadanie metoda array.shift() i wykonujemy to zadanie. (metody moga sie roznic. Skleroza nie boli) /Przepraszam za ortografie. Pisze z telefonu.

Ajax, jak nazwa wskazuje, może być asynchroniczny. Można to też wyłączyć. Zamień linięthis.request.open(method, url, true);nathis.request.open(method, url, false);

Wielkie dzięki! Wykorzystałęm sposób kokoss15 i wszystko działą jak powinno:D

Ale pojawił się jeszzce jeden problem. Jak już pisałem pobieram odp od PHP w formie JSON i wszystkie przeglądarki poza FireFox'em zwracają mi w tym miejscu:
var response=eval('('+Ajax.request.responseText+')');
Wkonsoli błędów Opery widać, że przyczną jest to że przed wartością {"data":["true"]} dodaje mi cztery kwadraciki. Błąd wynika najprawdopodobniej z błędu kodowania znaków, ale zarówno a w zapytaniu Ajax, w html, jak i w PHP ustawiłęm tak samo UTF-8:
header('Content-Type: text/html;charset=utf-8');this.request.overrideMimeType('text/html; charset=UTF-8');<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Użytkownik blazej_x edytował ten post 21 marzec 2008, 14:14


Używaj UTF-8 bez sygnatury. Musisz zapisać plik, który jest pobierany przez Ajax, w kodowaniu bez sygnatury. Ja to robię w Notepadzie2 (jak na mój system :-P).

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.