I've found a possible bug while I was using jQuery and Ajax function on my new web site, or more probably some big bug on my code that is driving me crazy.
Here's the web site URL for further documentation, http://phpschool.altervista.org/is/
The problem occurs when I call the function loadXML
to load some contents using ajax this way:
$("#menubar .button").live("click",function () {
$("#aj_load").fadeOut("slow", function()
{
loadXML('archive/'+$(this).attr("id")+'.html');
});
});
// #menubar .button is the identifier for the menu buttons.
// #aj_load is the div that contains ajax contents when requested.
So the meaning of this code, should be
aj_load
,But, When I do so, ajax request report error 404 or 12000, and the script stops running.
If you try on the web site to click the about button for example, you should see it's working correctly, because I've modified the code in order to remove the fadeout
function from the contenitor:
$("#menubar .button").live("click",function () {
loadXML('archive/'+$(this).attr("id")+'.html');
});
Why a fade function should interfere anyway with ajax requests? I can't explain this.
loadXML
contains .load()
function from jQuery, you can see it on the web site.
EDIT:
function loadXML(xmlURL)
{
resetStyles();
$("#aj_load").load(xmlURL+" #content0"+cur_seq, function(response, status, xhr) {
if (status == "error")
{
var msg = "Pagina Non Trovata: ";
$("#aj_load").html('<br/><br/><br/><h3 style="text-align:center">'+msg + xhr.status + " " + xhr.statusText+'</h3>');
}
else
{
num_seq = $("#aj_content").text();
if(num_seq !="0")
{
$("#less").off("click").on("click", function()
{
$("#aj_load").fadeOut("slow",function()
{
slideUP(num_seq);
loadNEXT(xmlURL,"prev");
});
});
$("#more").off("click").on("click", function()
{
$("#aj_load").fadeOut("slow",function()
{
slideDW(num_seq);
loadNEXT(xmlURL,"next");
});
}).fadeIn("slow");
}
}
}).delay(300).fadeIn("slow",function(){inAnimation();});
}
It's because when you use $(this)
to get the button ID you're actually getting the ID of the element you're fading. Try this instead...
$("#menubar .button").live("click",function () {
var buttonID = $(this).attr("id");
$("#aj_load").fadeOut("slow", function()
{
loadXML('archive/' + buttonID + '.html');
});
});
Edit: Just modified your script on-the-fly and the above works fine. It looks nice as well. Think I might pinch that idea for when I rebuild my site ;)