为啥 AJAX 优于 iFrame?

Posted

技术标签:

【中文标题】为啥 AJAX 优于 iFrame?【英文标题】:Why AJAX over iFrames?为什么 AJAX 优于 iFrame? 【发布时间】:2012-05-26 06:51:07 【问题描述】:

我是一个相对较新的程序员,和他告诉我的一个伙伴交谈,在 AJAX 之前,他使用 iframe 发送数据和更改内容(显然是借助 javascript)。

我知道两者是相似的技术,但我没有找到一篇文章来描述它们的特点,

AJAX 与 Iframe 相比有哪些优势?

编辑 我没有找到对该技术的任何解释,但我的伙伴告诉我他通过隐藏的 iframe 发布数据并提交 iframe,听起来只是 iframe 必须刷新,但我从来没有这样做过

【问题讨论】:

Iframe 让上传文件作为 AJAX 请求的一部分变得容易。否则,它们本身不会提供太多优势。 @techfoobar 好的,但是,我想看看这两种技术的解释,也许在某些情况下使用 Iframe 更好 我最后一次使用 iFrame 是在 2004 年!就像@techfoobar 所说的那样,由于您的帖子将是同步的,因此上传文件变得更加容易,但是对于其他事情,例如在屏幕上加载信息,如果正确实施,AJAX 可以更好地完成这项工作。使用 AJAX,您无需发布整页内容即可在主视图上显示一些内容,也无需编写额外代码来从 iFrame 中的文档中提取元素。 正如他们所说,AJAX 允许更新和发送而无需整页回发。使用 iFrame,即使是最小的更改也需要整页回发。根据您在网站上使用的表格来考虑它。在主页的侧栏上登录并回发整个页面的站点很可能使用 iFrame。如果您登录并且登录消失并且有您的帐户信息但不必刷新整个页面,那可能是 AJAX。在大多数情况下,AJAX 更好,因为您希望处理尽可能小。渲染一小部分比渲染整页更好 好吧,我没有找到任何关于该技术的解释,但我的伙伴告诉我他通过隐藏的 iframe 发布数据并提交 iframe,听起来好像只需要刷新 iframe,但我从来没有这样做了 【参考方案1】:
    AJAX 的一个优势是能够读取 要求。您还可以访问页眉,而您没有 iframe。 Ajax 可以处理多个异步请求。这有点棘手 使用 iframe,因为您需要为每个请求创建一个 iframe(并保持 跟踪所有这些以稍后删除它们)而不是回收 同一个。 现有的库充满了 AJAX 的优点,并且有更大的社区支持基础。

【讨论】:

我认为@rob-sedgwick 提到的内容也应该在这里注意:页面的CSS样式将仅适用于通过AJAX加载的内容。当您通过 iFrame 加载内容时,您必须在其中再次包含您的样式..【参考方案2】:
iframe

是一种分别在一个页面中显示两个(或多个)网页的方式

 ajax

是一种合并两个(或多个)网页(或新数据)合并一个

的方法

我发现 Ajax 的主要优势是;

CSS 将流向调用它的页面。 一种无需刷新页面即可检索数据并向访问者更新新信息的方法。

因为它巧妙地使用了 Ajax 而对这个网站进行了一次精彩的提及。

通过 Ajax 实现“Google 即时”和提示性搜索

【讨论】:

【参考方案3】:

只要我的两分钱:

我同意上面 Kris 的观点,我不会说它们具有可比性。

有一个用例,我发现 iFrame 比 AJAX 更易于使用,也就是说,如果您需要将复杂的表单提交到另一个页面但您不需要任何响应 - iframe 路由是迄今为止最简单的编码。

除此之外,AJAX 使用一个比喻,充当了一个知识渊博的中间人。它将处理多个请求,这些请求的状态,并以您需要的格式交回数据。

【讨论】:

【参考方案4】:

我只是想添加这个,因为我没有在任何答案中看到。

使用 Ajax 的原因主要是关于控制,您可以从中获得很多。这些原因上面已经提到了。

不过,Ajax 的一个严重缺点是它是一个 JS 修复程序。 JavaScript 是一门很棒的语言,但一段时间以来人们一直在把它扔在每一个问题上,如果将它们内置到浏览器中,可以优化的事情现在正在用 JS 慢慢完成(与编译语言相比)。

iFrame 就是一个很好的例子。它们代表了一个非常常见的用例,希望在其他一些 html 中包含一些 html。不幸的是,他们在这方面并不是很了不起,往往比其他任何事情都更令人头疼。

如果您想包含一些内容而不是让它弄乱您的网站,也不想让您的网站弄乱它,那么 iFrame 非常棒。对于在其他 html 中包含一些随机 html 的更常见用例,Ajax 更好。

我想说的是:这很愚蠢。没有理由不应该有像 iFrame 这样更像 Ajax 的东西。但是,通过加入 Ajax(就像我们所有人一样),我们现在别无选择。

这是一个问题的最大原因是 JS 从来都不是互联网的绝对构建块。此外,几乎每个网站都在使用它来侵犯用户隐私。因此,如果您正在寻找使用 iFrame 的充分理由,这是我的:

不需要JS的感觉真好。如果您可以通过 JS 使您的网站改进,而不是 依赖,那将是一项来之不易的成就,并且该网站总体上会感觉不那么“hacky”。

无论如何,这只是我的意见。

【讨论】:

【参考方案5】:

根据我的经验,通过 AJAX 加载的数据比 iFrame 中的数据更容易操作。 AJAX 也非常适合创建更好的用户体验。但是我不确定是否一定要将 iFrame 和 AJAX 归为同一类别,因为 AJAX 是异步内容,而 iFrame 实际上只是从您的网站外部加载的另一个页面。

我还可以看到 iFraming 会造成 SEO 障碍并造成糟糕的用户体验。老实说,如果我可以访问内容,我会更喜欢 AJAX。

【讨论】:

通常 iframe 是隐藏的,在 AJAX 之前,通常使用它从服务器检索数据而无需重新加载。 Iframe 的内容由驻留在主页中的 JavaScript 抓取。 HTML 将通过 JS 插入到 DOM 中,或者如果它是一个 JS 块则针对父页面执行。

以上是关于为啥 AJAX 优于 iFrame?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 在 IFRAME 中加载页面

如何根据 iframe 中 AJAX 调用的完成来运行函数

为啥前端尽量少用iframe

从 iframe 到 ajax 的会话

iframe 和ajax局部刷新的区别

为啥前端尽量少用iframe