代码之家  ›  专栏  ›  技术社区  ›  Jimmy

将fancybox与AJAX调用的内容一起使用

  •  1
  • Jimmy  · 技术社区  · 9 年前

    尝试通过AJAX调用从Facebook加载内容,弹出一个fancybox弹出窗口。问题是链接在新窗口中打开,而不是弹出窗口。

    我正在成功地进行绑定,并且在同一页面中有一个参考图像,它与从Facebook成功抓取数据时加载的脚本一起工作。这意味着脚本正在运行,但图像仍然无法在fancybox中打开,但我真的不明白为什么即使成功也无法到达脚本。我错过了什么?

    编辑: 我尝试了一些警报,看到警报在脚本前后弹出,但直到整个循环完成,脚本才运行,图像才出现在站点上。我猜在图像加载到页面上之后,我需要在.fancybox缩略图项上绑定它才能工作。尝试了完整的:函数,但它在加载图像之前运行。

    编辑2 结果表明,如果我在href标记中输入“#”而不是指向Facebook的链接,fancybox会触发,但会给出“内容无法加载”错误消息。

    编辑3 阅读fancybox,它说它支持添加异步项,但我不知道为什么它仍然不起作用

    $(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 回复  |  直到 9 年前
        1
  •  3
  •   Jimmy    9 年前

    这是因为图像的url不包含图像文件扩展名…请尝试强制fancybox类型为 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;
    }
    <!-- 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>

    感谢@JFK的建议 image 类型:)

        2
  •  1
  •   Dekel    9 年前

    我不知道你从哪里得到fancybox代码的配置,但这正是导致你所有麻烦的原因。

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

    这是新的代码,将工作。

    $(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);
      }
    });  
    <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>