如何检查 iframe 的 410 状态?

How can I check the 410 status of an iframe?

我正在构建一个页面,该页面使用 Slideshare API 从特定的 Slideshare 用户那里提取一组有限的演示文稿,并输出一系列嵌入了这些演示文稿的 iframe。

在大多数情况下,页面按预期工作,但是 API 调用的其中一个演示文稿最近被删除,因此当页面加载该 iframe 时,浏览器 returns 410. 遗憾的是,Slideshare 返回的 XML 中没有 object 可用于确定该特定演示文稿是否已被删除。

因此,我想在将特定 iframe 添加到页面之前检查 410 错误。让我感到困难的是,在进行 API 调用时不会出现错误,而是在加载嵌入式 iframe 时出现错误,所以我不知道在哪里或如何进行适当的检查。

相关代码如下:

$.ajax({
url: slideShareURL,
dataType: 'XML',
success: function(data) {
    var allSlides = x2js.xml2json(data);
    allSlides = allSlides.User.Slideshow;
    for (i = 0; i < allSlides.length; i++) {
        document.getElementById('slides').innerHTML += allSlides[i].Embed;
    }
}
});

备注:

编辑:下面 Christophe 提供的答案几乎是完美的,但我必须添加一个闭包才能使第二个 ajax 调用在 for 循环中工作。

嗯,这个解决方案怎么样:

$(function() {
    $.ajax({
        url: "www.domain.com/iframe",
        dataType: "jsonp",
        timeout: 5000,

        success: function () {
            $("#iframe").attr("src", "www.domain.com/iframe");
        },
        error: function (parsedjson) {
            if(parsedjson.status == "200") {
                $("#iframe").attr("src", "www.domain.com/iframe");
            } else {
                // Handle error
            }
        }
    });
});

Christophe 提供的答案使我走上了正确的轨道,但无法 运行 第二个 ajax 在 for 循环中正确调用。经过更多研究后,我了解了闭包,并得出以下结论:

$.ajax({
    url: slideShareURL,
    dataType: 'XML',
    success: function(data) {
        var allSlides = x2js.xml2json(data);
        allSlides = allSlides.User.Slideshow;

        for (i = 0; i < allSlides.length; i++) {

        (function(i) {
                var slideURL = allSlides[i].SlideshowEmbedUrl;
                $.ajax({
                    url: slideURL,
                    success: function () {
                        document.getElementById('slides').innerHTML += allSlides[i].Embed;
                    },
                    error: function () {
                        console.log('Failed to load');
                    }
                })
            })(i);
        }
    }
});