使用带有来自AJAX调用内容的fancybox

时间:2016-06-14 09:26:58

标签: jquery ajax fancybox

尝试使用AJAX调用从Facebook加载的内容获取fancybox弹出窗口。问题是链接在新窗口中打开而不是弹出窗口。

我正在成功进行绑定,并且我在同一页面中有一个参考图像,该图像与从Facebook成功获取数据加载的脚本一起使用。这意味着该脚本正在运行,但图像仍然无法在fancybox中打开,但我无法弄清楚为什么即使在成功中他们也无法访问脚本。我错过了什么?

编辑:我尝试了一些警报并看到警报在脚本之前和之后弹出,但是在整个循环完成并且脚本没有出现之前,图像没有出现在网站上之后会跑。在图像加载到页面上之后,猜测我需要在.fancybox-thumb项目上绑定它才能工作。尝试完成:功能,但它也在加载图像之前运行。

EDIT 2 如果我在href标记中添加“#”而不是Facebook的链接,fancybox触发器会显示“内容无法加载”错误消息。

编辑3 阅读fancybox并说它支持添加了asyncronus项目,但我不知道为什么它仍然无效

$(document).ready(function () {
    $(".fancybox-thumb").fancybox({
         helpers: {
         title: { type: 'inside' },
         buttons: {},
         type: 'iframe',
         thumbs: { width: 50, height: 50 },
         overlay: { locked: false }
         }
    });         
 });

var accessToken = "XXX";
        var postsURL = "https://graph.facebook.com/ALBUMID/photos/?fields=name,link&access_token=" + accessToken;

        $.ajax({
            url: postsURL,
            method: 'GET',
            dataType: "jsonp",
            success: function (data) {
                for (var i = 0; i <= data.data.length - 1; i++) {
                    var Description = ""

                    if (data.data[i].name != null) {
                        Description = data.data[i].name
                    }

                    var div = $("<div class='facebookimage'><a class='fancybox-thumb' href='https://graph.facebook.com/" + data.data[i].id.toString() + "/picture?type=normal" + "' rel='fancybox-thumb' title='" + Description + "'><img src='https://graph.facebook.com/" + data.data[i].id + "/picture?type=normal' /></a></div>");
                    div.appendTo($("#AlbumFeed"));

                }
            },
            error: function (status) {
                console.log("Facebook data could not be retrieved. Failed with a status of " + status);
            }
        });  



HTML:

<div id="AlbumFeed"></div>

2 个答案:

答案 0 :(得分:2)

这是因为您图片的网址不包含图片文件扩展名...请尝试将fancybox类型强制为java version "1.8.0_91",这样...

iframe

更新:代码段中的工作示例

$(".fancybox-thumb").fancybox({
  type: 'image'
});
var accessToken = "XXX";
var postsURL = "https://graph.facebook.com/ALBUMID/photos/?fields=name,link&access_token=" + accessToken;

$.ajax({
  url: postsURL,
  method: 'GET',
  dataType: "jsonp",
  success: function(data) {
    for (var i = 0; i <= data.data.length - 1; i++) {
      var Description = ""

      if (data.data[i].name != null) {
        Description = data.data[i].name
      }

      var div = $("<div class='facebookimage'><a class='fancybox-thumb' href='https://graph.facebook.com/" + data.data[i].id.toString() + "/picture?type=normal" + "' rel='fancybox-thumb' title='" + Description + "'><img src='https://graph.facebook.com/" + data.data[i].id + "/picture?type=normal' /></a></div>");
      div.appendTo($("#AlbumFeed"));
    }
    $(".fancybox-thumb").fancybox({
      type: 'image',
      helpers: {
        title: {
          type: 'inside'
        },
        buttons: {},
        thumbs: {
          width: 50,
          height: 50
        },
        overlay: {
          locked: false
        },
      }
    });

  },
  error: function(status) {
    console.log("Facebook data could not be retrieved. Failed with a status of " + status);
  }
});
* {
  max-width: 100%;
}

.facebookimage {
  display: inline-block;
  width: 30%;
}

.fancybox-thumb {
  display: block;
}

感谢@JFK建议<!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- Fancybox --> <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js"></script> <!-- Fancybox Thumbs --> <link href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-thumbs.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-thumbs.js"></script> <!-- HTML Starts Here --> <div id="AlbumFeed"></div>类型:)

答案 1 :(得分:1)

我不知道你在哪里获得了fancybox代码的配置,但这就是造成你所有麻烦的原因。

fancybox构造函数没有helpers选项,您错过了那里的type: 'iframe'

这是可行的新代码。

&#13;
&#13;
$(document).ready(function () {
  $(".fancybox-thumb").fancybox({
    type: 'iframe'
  }); 
});

var accessToken = "EAAWGDX5GyuwBAPokOnZBgTHZBwlIxZAVkw8cI2SD8SteVZBNmQ5EK9X2T7AWJpBs1ZAdbpLoL37IkT9yfyurooz5RygEp7ZBFF67MLLprxCy25wZBNSYh1HCKsx8Pgc0EAx7jmPzq7Yi4JNG1jEHR9mpHZCsZCxgcGoGAoNvX7tv6VwZDZD";
var postsURL = "https://graph.facebook.com/552189621541312/photos/?fields=name,link&access_token=" + accessToken;

$.ajax({
  url: postsURL,
  method: 'GET',
  dataType: "jsonp",
  success: function (data) {
    for (var i = 0; i <= data.data.length - 1; i++) {
      var Description = ""

      if (data.data[i].name != null) {
        Description = data.data[i].name
      }

      var div = $("<div class='facebookimage'><a class='fancybox-thumb' href='https://graph.facebook.com/" + data.data[i].id.toString() + "/picture?type=normal" + "' rel='fancybox-thumb' title='" + Description + "'><img src='https://graph.facebook.com/" + data.data[i].id + "/picture?type=normal' /></a></div>");
      div.appendTo($("#AlbumFeed"));
    }
  },
  error: function (status) {
    console.log("Facebook data could not be retrieved. Failed with a status of " + status);
  }
});  
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js"></script>

<div id="AlbumFeed"></div>
&#13;
&#13;
&#13;