【问题标题】:Using fancybox with content from AJAX call使用来自 AJAX 调用的内容的 fancybox
【发布时间】:2016-06-14 09:26:57
【问题描述】:

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

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

编辑:我用警报做了一些实验,发现警报在脚本之前和之后弹出,但图像直到整个循环完成并且脚本没有出现在网站上不要在那之后跑。猜想我需要在页面上加载图像后绑定 .fancybox-thumb 项目才能正常工作。尝试了 complete: 函数,但它在加载图像之前运行。

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

EDIT 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>

【问题讨论】:

  • 您的代码(截至目前)无法真正运行。那里缺少东西。发布显示您的问题的完整代码。
  • 我描述了这个问题。 fancybox 不会在图像上触发,因为图像是在 fancybox 的代码运行后加载的。我遗漏的代码是一个空的 div 和 accesstoken/albumid。
  • 有几个位置可能会给您带来问题。如果您希望有人提供帮助,那么查看和调试工作代码会更容易,而不是从头开始猜测可能是什么问题。
  • 修改了一些代码,看看能不能遇到和我一样的问题。

标签: jquery ajax fancybox


【解决方案1】:

这是因为您的图片的网址不包含图片文件扩展名...尝试像这样将fancybox类型强制为iframe...

$(".fancybox-thumb").fancybox({
  type: 'image'
});

更新:代码 sn-p 中的工作示例

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 类型:)

【讨论】:

  • 它没有,访问时 url 被替换,但我明白为什么这是一个问题。但主要问题仍然是我认为加载图像时它不会触发,因为这行代码也没有触发:thumbs: { width: 50, height: 50 },
  • 你用的是哪个版本的fancybox?
  • 当您说问题是因为链接没有图像文件扩展名时,您是对的,但是强制类型为 iframe 不是解决方案。如果有帮助,请阅读此内容stackoverflow.com/a/17554660/1055987 请注意,这不是唯一的问题,您仍然需要弄清楚其余的问题;)
  • 你们是对的。这就是为什么它适用于我的静态参考对象。它有一个图像文件扩展名。干得好!
  • 拯救了我的一天。非常感谢。
【解决方案2】:

我不确定你从哪里得到了 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>

【讨论】:

  • fancybox constructor doesn't have helpers ... 是的,确实如此,但是 type: 'iframe' 选项不会进入助手内部
  • @JFK,你说得对,我正在查看旧版本 (fancybox.net/api) 的文档,而不是新版本 (fancyapps.com/fancybox/#docs)。我会相应地更新答案。
  • @ShrameeSrivastav 不正确:helpers 是在 2.x 版中引入的,但在 1.3x 版中不存在(没有也不会)
  • @Dekel 差不多,但是强制类型为 iframe 并不是解决方案。如果有帮助,请阅读本文stackoverflow.com/a/17554660/1055987
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
相关资源
最近更新 更多