的fancybox通过AJAX获得的href的图像
jquery ajax fancybox这里是我的问题。 的fancybox用于显示图像,通过AJAX其中获得。 当页面加载时存在不存在的页面上的图像,仅与gallery的属性链接。 所以,当我点击这个处理这些代码的链接之一:
$(".fancybox-manual-c").live('click',function() {
$.ajax({
type : 'POST',
data : {'gal' : $(this).attr('rel')},
url : ' CodeGo.net
//dataType: 'json',
complete: function(data) {
var dataX = data.responseText;
console.log(data.responseText);
//fancybox的另一种用法 var img = [
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30711.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-27082.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30988.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30858.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-23424.jpg'},];
var opts = {
prevEffect : 'none',
nextEffect : 'none',
helpers : {
thumbs : {
width: 75,
height: 50
}
}
};
$.fancybox(img, opts);
}
});
});
这个解决方案工作得很好。但是,当
var img = [dataX];
而不是
var img = [
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30711.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-27082.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30988.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30858.jpg'},
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-23424.jpg'},];
我得到弹出式窗口的反响文本。 演示 我在做什么错了? 的fancybox-jQuery插件 版本:2.0.5(21/02/2012) jQuery的1.7-最新 的'代码
function directoryToArray($directory, $recursive = true) {
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
}
$directory = str_replace('./galleries/', '', $directory);
$file = $directory . "/" . $file;
$array_items[]= preg_replace("/\/\//si", "/", $file);
} else {
$directory = str_replace('./galleries/', '', $directory);
$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);
}
}
}
closedir($handle);
}
return $array_items;
}
header("Content-type: text/plain;charset=utf-8");
$arrays = directoryToArray( "./galleries/".$_POST['gal']);
foreach($arrays as $array){
echo "{href:'/gallery/galleries/$array'}, \n";
}
更新
$(".fancybox-manual-ajax").live('click',function() {
$.ajax({
type : 'POST',
data : {'gal' : $(this).attr('rel')},
url : ' CodeGo.net
dataType: 'text',
complete: function(data) {
var dataX = data.responseText;
var dataXsplit = dataX.split(',');
var dataXarrayObj = new Array(), i;
for(i in dataXsplit){
if(dataXsplit[i].length){ //remove last empty element after .split()
dataXarrayObj[i] = $.parseJSON(dataXsplit[i]);
}
}
var opts = {
prevEffect : 'none',
nextEffect : 'none',
helpers : {
thumbs : {
width: 75,
height: 50
}
}
};
$.fancybox(dataXarrayObj, opts);
}
});
});
本文地址 :CodeGo.net/434539/
-------------------------------------------------------------------------------------------------------------------------
1. 好了,你没有做错什么,但有很多factor在这种情况下要考虑 首先,从你的ajax调用,您可以获得:
var dataX = data.responseText;
和
responseText
属性获取响应数据作为一个字符串,所以的fancybox显示器如字符串,而不是图像数组。 你必须做一个解决方法是这样的字符串转换成一个JavaScript对象 CodeGo.net,这样的fancybox可以解析它。有不同的方法来做到这一点。其中
eval()
函数,但可以有安全的问题,以便不 既然你jQuery的,做你最安全的方法是jQuery.parseJSON(JSON),但是你必须确保你将被转换成一个良好的JSON字符串。 你的情况,你的“文件似乎呈现这种格式
{href:'/gallery/galleries/gallery1/wallpapers_by_ellin-30711.jpg'},....
但是一个良好的JSON字符串应该像这样:
{"href":"/gallery/galleries/gallery1/wallpapers_by_ellin-30711.jpg"},...
注意强制性双引号。 一旦你确定
data.responseText
返回一个字符串,如:
data.responseText='{"href":"/gallery/galleries/gallery1/wallpapers_by_ellin-30711.jpg"},{"href":"/gallery/galleries/gallery1/wallpapers_by_ellin-27082.jpg"}, etc ....'
var dataX = data.responseText;
然后您可以:1)。分割字符串,2)。每次转换分成一个JavaScript对象和3)。把它变成像一个对象数组:
var dataXsplit = dataX.split(',');
var dataXarrayObj = new Array(), i;
for(i in dataXsplit){
dataXarrayObj[i] = jQuery.parseJSON(dataXsplit[i]);
}
在这之后,你可以解雇的fancybox与对象的正确数组(检查或者做的fancybox:
var img = dataXarrayObj;
$.fancybox(img, opts);
或者干脆
$.fancybox(dataXarrayObj, opts);
请注意,你不需要附上数组中
[]
括号