Ajax motor hiba (na, de mi?)
Sziasztok!
Van egy saját készítésű Ajax motorom:Két gondom van vele, de amúgy a legfőbb feladatát ellátja ás működik.
Az első, kisebb gond, hogy amint láthatjátok, nem tudom, hogy a 'JavaScript'-ben hogyan kell Konstruktor függvényeket létrehozni, ezért plusz egy függvény kell. Nem ért valaki a 'JavaScript' Konstruktorokhoz? Ha van ilyen, akkor legyenszives ossza meg velem tudományát!
A második, a lényegesebb, hogy nem működik a lefedés, amit a 'fuggonyFel()' függvény csinálna. Egyszerűen nem csinál semmit. Azonban, ha például a 110-edik sor után beszúrok egy 'alert()'-ot, akkor tökéletesen működik (attól eltekintve, hogy nem kell az 'alert()'). Tehát a 110-111-edik sort így alakítom:Nos remélem vannak ötleteitek!
Előre is köszönök minden segítséget.
■ Van egy saját készítésű Ajax motorom:
AjaxMotor = function()
{
var self = this;
this.vissza = null;
this.toltesTipus = null;
this.kulsoTolto = null;
this.fuggonyId = null;
this.toltoId = null;
this.keszVanId = null;
this.xmlFeldolgozo = null;
this.scrollTop = null;
this.scrollLeft = null;
this.xmlHttp = function()
{
var seged = null;
try
{
seged = new XMLHttpRequest();
}
catch(e)
{
try
{
seged = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
seged = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
alert("Hát a böngészod nem komálja az AJAX-ot.\nEzen változtass, ha szeretnéd ezt a honlapot megnézni!\n(Tölts le egy újabbat!)");
}
}
}
self.xmlHttp = seged;
self.xmlHttp.onreadystatechange = self.tolto;
};
this.tolto = function()
{
switch (self.xmlHttp.readyState)
{
case 0:
$("#" + self.toltoId).html("Töltés...");
break;
case 1:
$("#" + self.toltoId).html("Töltés...");
break;
case 2:
$("#" + self.toltoId).html("Töltés...");
break;
case 3:
$("#" + self.toltoId).html("Töltés...");
break;
case 4:
self.kesz();
break;
default:
alert("Hiba!");
}
};
this.kesz = function()
{
if (self.vissza == "text")
{
$("#" + self.keszVanId).html(self.xmlHttp.responseText);
}
else
{
self.xmlFeldolgozo(self.xmlHttp.responseXML, self.keszVanId);
}
self.fuggonyLe();
};
this.fuggonyFel = function()
{
var fuggonySzeles = ($(window).outerWidth() > $(document).outerWidth()) ? $(window).outerWidth() : $(document).outerWidth();
var fuggonyMagas = ($(window).outerHeight() > $(document).outerHeight()) ? $(window).outerHeight() : $(document).outerHeight();
self.scrollTop = $(window).scrollTop();
self.scrollLeft = $(window).scrollLeft();
$(window).scroll( function() { $(window).scrollTop(self.scrollTop); $(window).scrollLeft(self.scrollLeft); } );
$("#" + self.fuggonyId).css("visibility", "visible");
$("#" + self.fuggonyId).css("display", "block");
$("#" + self.fuggonyId).css("position", "absolute");
$("#" + self.fuggonyId).css("top", "0px");
$("#" + self.fuggonyId).css("left", "0px");
$("#" + self.fuggonyId).css("width", (fuggonySzeles + "px"));
$("#" + self.fuggonyId).css("height", (fuggonyMagas + "px"));
$("#" + self.toltoId).css("visibility", "visible");
$("#" + self.toltoId).css("display", "block");
$("#" + self.toltoId).css("position", "absolute");
$("#" + self.toltoId).css("top", (parseInt(($(window).outerHeight() - $("#" + self.toltoId).height()) / 2) + "px"));
$("#" + self.toltoId).css("left", (parseInt(($(window).outerWidth() - $("#" + self.toltoId).width()) / 2) + "px"));
};
this.fuggonyLe = function()
{
$(window).unscroll();
$("#" + self.fuggonyId).css("visibility", "hidden");
$("#" + self.fuggonyId).css("display", "none");
$("#" + self.toltoId).css("visibility", "hidden");
$("#" + self.toltoId).css("display", "none");
};
this.kerelem = function(method, url, tipus, adat, obj)
{
self.fuggonyFel();
self.xmlHttp.open(method, url, tipus);
self.xmlHttp.send(adat);
}
}
function Ajax()
{
var a = new AjaxMotor();
a.vissza = (Ajax.arguments[0] != null && (Ajax.arguments[0] == "xml" || Ajax.arguments[0] == "text")) ? Ajax.arguments[0] : "text"; // Várt eredmény típusa (szöveg || xml)
a.toltesTipus = (Ajax.arguments[1] != null && (Ajax.arguments[1] == "kulso" || Ajax.arguments[1] == "belso")) ? Ajax.arguments[1] : "belso"; // A töltési animáció típusa (külso || belso)
a.kulsoTolto = (Ajax.arguments[2] != null && (Ajax.arguments[2] != "" && Ajax.arguments[1] == "kulso")) ? Ajax.arguments[2] : null; // Ha külso a tölto, akkor a függvény neve
a.fuggonyId = (Ajax.arguments[3] != null && Ajax.arguments[3]!= "") ? Ajax.arguments[3] : "takaro"; // Az oldalt töltés közben lefedo doboz Id-je
a.toltoId = (Ajax.arguments[4] != null && Ajax.arguments[4] != "") ? Ajax.arguments[4] : "tolto"; // A tölto szöveget és animációt megjeleníto doboz neve
a.keszVanId = (Ajax.arguments[5] != null && Ajax.arguments[5] != "") ? Ajax.arguments[5] : "celDoboz"; // Az eredmény helyének Id-je
a.xmlFeldolgozo = (Ajax.arguments[6] != null && (Ajax.arguments[6] != "" && Ajax.arguments[0] == "xml")) ? Ajax.arguments[6] : null; // Ha a várteredmény XML, akkor a függvény neve
a.xmlHttp();
return a;
}
Az első, kisebb gond, hogy amint láthatjátok, nem tudom, hogy a 'JavaScript'-ben hogyan kell Konstruktor függvényeket létrehozni, ezért plusz egy függvény kell. Nem ért valaki a 'JavaScript' Konstruktorokhoz? Ha van ilyen, akkor legyenszives ossza meg velem tudományát!
A második, a lényegesebb, hogy nem működik a lefedés, amit a 'fuggonyFel()' függvény csinálna. Egyszerűen nem csinál semmit. Azonban, ha például a 110-edik sor után beszúrok egy 'alert()'-ot, akkor tökéletesen működik (attól eltekintve, hogy nem kell az 'alert()'). Tehát a 110-111-edik sort így alakítom:
self.fuggonyFel();
alert("bla");
self.xmlHttp.open(method, url, tipus);
Előre is köszönök minden segítséget.
ötletek
keress, amúgy meg most megy: http://weblabor.hu/forumok/temak/21044 és igen egy "kicsit" értenek hozzá.
a másik kérdésedre meg az az ötletem, hogy ha az alert függvénnyel működik, akkor olyasmi hiba lehet benne, hogy (és innentől hipotetikus minden, mert nem bogarásztam végig a kódot) túl hamar jön egy függönyle vagy valami hasonló. az alert nem csinál semmi különlegeset, csak megakasztja a kód futását arra az időre, amíg meg nem nyomod az ok gombot. tehát ott az időzítéssel lehet valami bibi.
egyébként meg console.log() és firebug, azzal szépen le tudod követni, hogy meghívódik-e a függvény vagy sem.
setTimeout...
nekem sok ilyen "alertel mukodik, anelkul meg nem" gondom oldotta meg ez az alig eszreveheto kesleltetes :)
readyState
igaz..
És hogyan oldom meg...