0
我的腳本可以被細分爲三個部分:用JSON數據點擊加載環球免稅店圖庫。我需要新鮮的眼睛看我的錯誤
- 事件處理程序來捕獲點擊菜單項的ID。這是圖庫名稱,它告訴腳本在哪裏可以找到特定圖庫的圖像和xml文件。
- 從xml中提取圖像信息並將其轉換爲可用的JSON的功能。
- 將JSON加載到環球免稅店。
JSON不會變成Galleria,或者我沒有正確加載它。不幸的是,對JS來說,我太新了,以至於在調試時非常有效。我覺得我在這個相當深的水中。
該網站爲http://willowbrook.businesscatalyst.com/showcase。
這是我的腳本。我正在使用最新的jQuery和xml2json插件。
$(document).ready(function() {
var firstGallery = 'kitchens';
var galleriaNavID = '#showcasenav';
var galleriaID = '#showcaseitems';
var selectedClass = 'selected';
var imageFolder = '/images/showcase/'; // Don't forget the/(forward slash) before and after
var xmlFileName = 'PhotoGallery.xml';
var selectedNavElement = galleriaNavID+' .'+selectedClass;
var galleryName = $(selectedNavElement).attr('id');
if(galleryName == null) {
galleryName = firstGallery;
$('#'+firstGallery).click();
};
function loadGalleria() {
function GalleriaBCtoJson() { // Convert PhotoGallery XML to JSON and load dynamically into Galleria
var data = new Array;
$.get(imageFolder+galleryName+'/'+xmlFileName, function(xml){
var i;
var imgArray = $.xml2json(xml).album.img;
for(i in imgArray) {
data.push({ image: imageFolder+galleryName+'/'+imgArray[i].src });
};
});
return data;
};
var data = GalleriaBCtoJson();
if ($(galleriaID).data('galleria')) { // If Galleria has already been initialized,
$(galleriaID).data('galleria').load(data); // load galleria with the new data
}
else { // Call Galleria, set options,
$(galleriaID).galleria({
dataSource: data, // and add the data as dataSource
image_crop: true,
carousel: true,
carousel_speed: 2000,
autoplay: 5000,
thumbnails: true,
showInfo: false,
transition: 'fade',
transition_speed: 600,
lightbox: true,
easing: 'galleriaIn',
pauseOnInteraction: false,
debug: false
});
}
};
$(galleriaNavID+' a').click(function(e) { // attach event handler to the menu
e.preventDefault();
$(selectedNavElement).removeClass(selectedClass); // toggle selected class
$(this).addClass(selectedClass);
galleryName = $(this).attr('id');
loadGalleria();
});
});
這是我使用建議完成的解決方案。這完美的作品:
galleria : function(){
$(document).ready(function() {
var firstGallery = 'kitchens';
var galleriaNavID = '#showcasenav';
var galleriaID = '#showcaseitems';
var selectedClass = 'selected';
var imageFolder = '/images/showcase/'; // Don't forget the/(forward slash) before and after
var xmlFileName = 'PhotoGallery.xml';
var selectedNavElement = galleriaNavID+' .'+selectedClass;
var galleryName = $(selectedNavElement).attr('id');
if(galleryName == null) {
galleryName = firstGallery;
};
function loadGalleria() {
function GalleriaBCtoJson(callback) { // Convert PhotoGallery XML to JSON and load dynamically into Galleria
var data = [];
$.get(imageFolder+galleryName+'/'+xmlFileName, function(xml){
var i;
var imgArray = $.xml2json(xml).album.img;
for(i in imgArray) {
data.push({ image: imageFolder+galleryName+'/'+imgArray[i].src });
};
callback(data);
});
};
var data = GalleriaBCtoJson(function(data) {
if ($(galleriaID).data('galleria')) { // If Galleria has already been initialized,
$(galleriaID).data('galleria').load(data); // load galleria with the new data
}
else { // Call Galleria, set options,
$(galleriaID).galleria({
dataSource: data, // and add the data as dataSource
image_crop: true,
carousel: true,
carousel_speed: 2000,
autoplay: 5000,
thumbnails: true,
showInfo: false,
transition: 'fade',
transition_speed: 600,
lightbox: true,
easing: 'galleriaIn',
pauseOnInteraction: false,
debug: false
});
}
});
};
$(galleriaNavID+' a').click(function(e) { // attach event handler to the menu
e.preventDefault();
$(selectedNavElement).removeClass(selectedClass); // toggle selected class
$(this).addClass(selectedClass);
galleryName = $(this).attr('id');
loadGalleria();
});
$('#'+firstGallery).click();
});
}
只要記住把xml2json和廣場插件的頭。他們可以在這裏找到:http://www.fyneworks.com/jquery/xml-to-json/#tab-Download
所以,你會建議把我的if/else裏面的函數調用(你把「//繼續使用數據」)?我想我不明白ajax在分配給數據變量的時候是不是完整的。 – 2012-03-12 15:55:21
@AdamCook是的,類似的東西。當你返回'data'時,它是空的。 'data.push()'羣體在返回後完成,因此在羣體完成後需要調用另一個函數,而不是從函數返回數據,即所謂的* callback *。這對於異步編程是很典型的,如果您打算在將來編寫JavaScript,那麼現在就可以開始討論它了。 – David 2012-03-12 20:53:56