Я создаю фреймворк, который позволяет мне начинать с обычного статического веб-сайта, а затем, если у пользователя включен Javascript, он превращается в одностраничный сайт, который извлекает разделы из статических страниц, когда пользователь перемещается по сайту.
Я все еще работаю над идеями, но изо всех сил пытаюсь понять, как выполнять функции Javascript в определенном порядке, мой код (отредактированный) выглядит примерно так:
РЕДАКТИРОВАТЬ Мой код более подробно:
Когда функция loadSiteMap () завершает работу, переменная siteMap выглядит следующим образом:
{
"pageData" : [
{
"loadInTo" : "#aboutUs",
"url" : "aboutUs.html",
"urlSection" : ".sectionInner"
},
{
"loadInTo" : "#whatWeDo",
"url" : "whatWeDo.html",
"urlSection" : ".sectionInner"
},
{
"loadInTo" : "#ourValues",
"url" : "ourValues.html",
"urlSection" : ".sectionInner"
},
{
"loadInTo" : "#ourExpertise",
"url" : "ourExpertise.html",
"urlSection" : ".sectionInner"
}
]
}
Остальная часть моего кода:
function loadSiteMap() {
$('#body').empty();
$.ajaxSetup({cache : false});
$.ajax({
url: 'js/siteMap.js',
async: false,
dataType: 'json'
})
.done(function(data){
siteMap = data;
})
.fail(function(jqXHR, status){
alert('Its all gone to shit');
});
}
loadSiteMap();//So this is the first to be executed
$(function(){
function loadDataFromSiteMap() {
var toAppend = '';
var markerID = 'mark-end-of-append' + (new Date).getTime();
var loadGraphic = '<img src="images/loadGraphic.gif" alt="loading..." class="loadGraphic" />'
for(var i=0; i<siteMap.pageData.length; i++) {
var loader = siteMap.pageData[i];
toAppend += '<div id="'+ loader.loadInTo.substr(1) +'" class="sectionOuter">'+ loadGraphic +'</div>';
}
toAppend += '<div id="' + markerID + '"></div>';
$('#body').append(toAppend);
var poller = window.setInterval(function(){
var detected = document.getElementById(markerID);
if(detected){
window.clearInterval(poller);
$(detected).remove();
for(var i=0; i<siteMap.pageData.length; i++){
var loader = siteMap.pageData[i];
var dfd = $.ajax({
url: loader.url,
async: false
});
dfd.done(function(data, status, jqXHR){
var sections = $(data).find(loader.urlSection);
$(loader.loadInTo).html(sections).filter(loader.urlSection);
});
dfd.fail(function(jqXHR, status){
alert('Its all gone to shit');
});
}
}
}, 100);
}
function buildCarousel() {
$('.sectionInner').each(function(i) {
if($(this).has('.carousel').length) {
$(this).append('<a href="#" class="prev">Prev</a><a href="#" class="next">Next</a>');
$('.prev,.next').fadeIn('slow');
}
});
};
loadDataFromSiteMap();//This runs second then I want to execute...
buildCarousel();//Then when this is complete execute...
anotherFunction();//and so on...
Надеюсь, из этого вы увидите, чего я пытаюсь достичь в плане выполнения функций по порядку. Я хотел бы в конечном итоге превратить эту концепцию в плагин jQuery, чтобы я мог поделиться им. Если это имеет какое-то отношение к тому, чего я пытаюсь достичь сейчас, я приветствую мысли.
Большое спасибо заранее.