ajax
Ajax klaida
by neworld on Geg.12, 2007, under ajax
Jeigu dirbate su ajax, tikriausiai pastebėjote, jog tuo pačiu komponentu siunčiant antrą užklausą, kai pirmoji nepabaigta įvyksta klaida. Naršyklės išmeta klaidą, sustoja šios ajax užklausos. Tačiau kad taip neatsitiktu galime idėti filtra.
Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED)
[nsIXMLHttpRequest.send]” nsresult: “0xc1f30001
(NS_ERROR_NOT_INITIALIZED)”
Filtras:
[code lang="javascript"]Â function query(adr,handle) {
var browser = navigator.appName;
 if (http.readyState==1) {
  if (browser != "Microsoft Internet Explorer") {
   http.onreadystatechange = function() {};
  }
  http.abort();
 }
[/code]
Tiesiog ši koda įterpkite į savo ajax vykdymo pradžią. Nepamirškit http pakeisti į jūsų naudojamą ajax objektą.
O dabar kaip viskas veikia.
var browser = navigator.appName; //bus mum reikalingas nustatatnt naršyklę if (http.readyState==1) { //patikrinam ar mūsų ajax komponento (http) vykdymas lygus 1 (loading)
if (browser != “Microsoft Internet Explorer”) { //patikrinam ar naršyklė IE. Galbūt sugalvosite geresnį buda patikrinti
http.onreadystatechange = function() {}; // išvalome onreadystatechange, tam kad su FF viskas būtų tvarkoje
http.abort(); //sustabdom ajax buvusį querį, kad galėtu kuo puikiausiai dirbti naujas
Be to, jeigu kas nors paklausite, kodėl negaliu tiesiog patikrinti http.onreadystance, ir esant 4 vykdyti, tai viskas veiks, tačiau nulužus serveriui gali kilti bėdų, tarkim operoje bus bandomas įkrauti duomenis iš nulužusio serverio, tol kol duomenys bus gauti, tokiu atveju, teoriškai kol negaus duomenu operą, sustos bet koks ajax vykdymas.
Ajax ir IE6 cache bėdos
by neworld on Bal.18, 2007, under ajax
Jeigu ką nors mėginate daryti naudodamis ajax technologiją, patatarimas, visada iš serverio siuskite header’į:
Cache-Control: no-cache, must-revalidate
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pavizdys:
[code lang="php"] header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
[/code]
Kadangi IE6 pagal default nustatymus tikrina tik pagal adresą, todėl jeigu du sykius siusite užklausą tuo pačiu adresu ir nebus šio headerio, tai pirmos užklausos rezultatą patalpins cache ir daugiau kurį laiką naudos tik iš cache.
Pradžia su ajax
by neworld on Bal.04, 2007, under ajax
Turbūt daugelis žino kas yra ajax, todel atskirai šios temos nenagrinėsiu.
Pats paprasčiausias variantas yra:
Visa šita kodą reikia priskirti pačioje pradžioje, prieš vykdant ajax
[code lang="javascript"]//ši funkcija mum sukurs objektą, kuris yra ajax pagrindas.
function createRequestObject() {
var ajax;
var browser = navigator.appName;
if (browser == “Microsoft Internet Explorerâ€) {
ajax = new ActiveXObject(“Microsoft.XMLHTTPâ€);
} else {
ajax = new XMLHttpRequest();
}
return ajax;
}
//musu kintamajam http bus priskirta
var http = createRequestObject();
//mūsų funkcija skirta pačiam paprasčiausiam ajax panaudojimui
function sndReq(adr,handle) {
//ši funkcija nusiunčia GET methotu duomenis adresu adr
http.open('get', adr);
//kai duomenys bus nusiusti ir parsiusti bus vykdima handle kintamajam priskirta funkcija. Visos funckijos turi būti be argumentų, t.y. myhandle() tinka, tačiau myhandle(duomuo, antrasduomuo); nebetinka
http.onreadystatechange = handle;
//si funkcija skirta tik tuo atveju jeigu siunčiami POST metodu duomenys
http.send(null);
}
function myhandle() {
if (http.readyState == 4) {
var response = http.responseText;
alert(response);
}
}
[/code]
na o panaudoti galima šitaip
[code lang="javascript"]sndReq('labas.php',myhandle) [/code]
o labas.php turetu atrodyti maždaug šitaip:
[code lang="php"][/code]
Jei viskas gerai turėtumėte pamatyti lentelę su užrašu “sveikas, kaip sekasi”.
Straipsnis parašytas remiantis pixel.lt