如何检查 iframe 的 410 状态?
Posted
技术标签:
【中文标题】如何检查 iframe 的 410 状态?【英文标题】:How can I check the 410 status of an iframe? 【发布时间】:2018-05-01 03:33:03 【问题描述】:我正在构建一个页面,该页面使用 Slideshare API 从特定 Slideshare 用户那里提取一组有限的演示文稿,并输出一系列嵌入了这些演示文稿的 iframe。
在大多数情况下,页面按预期工作,但是 API 调用的演示文稿之一最近被删除,因此当页面加载该 iframe 时,浏览器返回 410。不幸的是,XML 中没有对象由 Slideshare 返回,可用于确定该特定演示文稿是否已被删除。
因此,我想在将特定 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;
);
注意事项:
slideShareURL 在前面的代码中使用 API 定义 我正在使用 xml2json.js 将从 API 接收到的 XML 转换为 json 对象 allSlides 是一组演示文稿,每个演示文稿都包含一组对象,例如幻灯片标题、ID、下载 URL 等 Embed 是包含完整 iframe 嵌入代码的对象编辑:下面 Christophe 提供的答案几乎是完美的,但我必须添加一个闭包以使第二个 ajax 调用在 for 循环中工作。
【问题讨论】:
【参考方案1】:嗯,这个解决方案怎么样:
$(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
);
);
【讨论】:
感谢您的回复。但除非我有误解,否则此解决方案的问题在于它假设 iframe 已经存在于网页上 - 但我能够生成 410 错误的唯一方法是在我的页面上实际动态包含 iframe,并且到那时已经太晚了。理想情况下,我只想检查 iframe 代码的状态(即 ),然后再将其包含在我的页面中。 谢谢,这实际上是我所需要的,只是缺少一个部分 - 我意识到我遇到了 for 循环和异步 ajax 调用的问题。我解决了它并在下面发布了我的解决方案。【参考方案2】:Christophe 提供的答案让我走上了正确的道路,但无法在 for 循环中正确运行第二个 ajax 调用。经过更多研究后,我了解了闭包,并得出以下结论:
$.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);
);
【讨论】:
以上是关于如何检查 iframe 的 410 状态?的主要内容,如果未能解决你的问题,请参考以下文章