如何构建Graceful Degradation AJAX网页?

2024-02-05

我想用“优雅降级”构建网页。即,即使JavaScript被禁用,网页也能正常工作。现在我必须对 AJAX 响应的格式做出设计决策。

如果禁用 javascript,则对服务器的每个 HTTP 请求都会生成 HTML 作为响应。浏览器将刷新并显示返回的 HTML。没关系。

如果启用了 javascript,每个对服务器的 AJAX HTTP 请求都会生成……好吧,JSON 或 HTML。

如果是HTML的话,很容易实现。只需使用 javascript 将部分页面替换为返回的 HTML 即可。而且,在服务器端,不需要太多代码更改。

如果它是 JSON,那么我必须再次在 javascript 中实现 JSON-to-html 逻辑,这几乎是服务器端逻辑的重复。重复是邪恶的。我真的不喜欢它。好处是带宽利用率比HTML好,带来更好的性能。

那么,优雅降级的最佳解决方案是什么? AJAX 请求返回 JSON 还是 HTML 更好?


我不认为有一个“最佳解决方案”any给定的情况。也许只是针对特定问题的“适当解决方案”。这实际上取决于您想要做什么。优雅降级对我来说意味着:

  • 构建一个“足够好”的界面,可在尽可能多的浏览器(桌面和移动设备)上运行。
  • 不显眼地添加一些脚本(验证方法、界面元素,例如选项卡和滑块等),这些脚本只有在页面加载的浏览器具有使其工作所需的功能时才会出现。

在服务器响应中使用 HTML 还是 JSON 是非常主观的,我经常发现自己很难在它们之间进行选择。有人可能会争辩,例如,从服务器接收一堆键值对并将它们渲染到现有的选择元素中意味着莫尔斯电码因此,编码时间会增加,潜在的错误也会增加。相反,您可以简单地从服务器请求预先构建的选择元素,并将其注入到容器中。构建元素的逻辑已经驻留在服务器上,为什么要使用两种不同的语言构建两次。

另一个观点是 JSON 最大限度地减少了带宽使用,因此值得付出额外的努力来解析一些 JSON 以在客户端上构建一些标记。我发现很容易不同意这种观点,有几个原因(我是not概括地说,不要误会我的意思)。首先,许多网络服务器被配置为压缩/压缩/gzip 其输出,并且许多浏览器接受压缩内容。标记是极其可压缩,因为它包含大量冗余(<strong></strong>)。因此,可以合理地认为 JSON 响应的大小不会明显小于带标记的响应。其次,大型数据集可能意味着客户端需要相当长的执行时间(令人讨厌的嵌套循环很常见 - 在此处出现的一些问题中很明显)。

我给您的建议是尝试了解每种方法的优点和缺点,并利用这些信息。您可能想阅读以下内容:

http://www.quirksmode.org/blog/archives/2005/12/the_ajax_respon.html http://www.quirksmode.org/blog/archives/2005/12/the_ajax_respon.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建Graceful Degradation AJAX网页? 的相关文章

随机推荐

  • ldap3 python修改用过滤器替换对象

    在应用ldapmodify时我们如何进行过滤 例如 这就是我的用户对象的样子 dn email protected cdn cgi l email protection ou users dc dev dc com sn po givenN
  • WP8应用程序中的付款

    我目前正在制作一个 Windows Phone 8 silverlight 应用程序 在应用程序中 我们希望允许用户通过 PayPal 或其他付款方式付款 我还从开发中心查找了应用内付款 但没有在那里看到具有可变值的付款 任何有关使用什么的
  • 如何判断哪些应用程序在 GAC 中注册了给定的程序集?

    当尝试使用 gacutil exe 删除给定程序集 在本例中为 log4net dll 但它应该适用于任何类似情况 时 由于应用程序需要该程序集 操作会失败 但是 我不知道如何判断哪些应用程序实际需要它 由于输出似乎表明该要求已记录在 MS
  • PHP 水印 - Zubrag

    我正在使用 zubrags PHP 水印脚本 附在下面 它的效果很好 除非我尝试使用 PNG 24 作为我的水印 生成的图像带有乱码 不透明的水印 我想知道是否有人可以帮助解释我需要在下面的脚本中更改哪些内容 以便将 PNG 24 作为正确
  • 找不到合适的 SDK 来定位

    我尝试为 UWP 创建项目 但收到此错误 我安装了 Windows 开发工具包并且它有效 谢谢
  • 使用 $http 访问原始 XHR 对象

    我需要访问原始数据XMLHttpRequest对象在支持它的浏览器上添加文件上传进度回调 这是可能的 还是我必须自己构建原始请求 如果是这样 我该如何包装生的XMLHttpRequest在承诺对象中 我模拟了 http调用构建自定义XMLH
  • 为什么迭代器方法不能采用“ref”或“out”参数?

    我今天早些时候尝试过这个 public interface IFoo IEnumerable
  • 容器内可滚动的 div

    我有以下 HTML http jsfiddle net fMs67 http jsfiddle net fMs67 我想让 div2 尊重 div1 的大小并滚动 div3 的内容 这可能吗 Thanks 更新1 这是我在提出问题时过于简单
  • JAR 文件:找不到主类

    好吧 我有一个奇怪的问题 我想将我的程序之一作为 jar 文件运行 但是当我双击打开它时 我收到一条错误消息 例如 找不到主类 程序正在关闭 我很确定我做的一切都是正确的 罐子应该可以工作 我也尝试过其他程序 每个程序都是一样的 我通过 B
  • printf 与 std::cout [重复]

    这个问题在这里已经有答案了 可能的重复 我应该在 C 代码中使用 printf 吗 https stackoverflow com questions 2017489 should i use printf in my c code 如果我
  • 如何在一张表中创建多个序列?

    我有一张 收据 表 我有列 customer id 谁有收据 和收据号 对于每个客户 receipt number 应从 1 开始 并且是一个序列 这意味着 customer id 和receipt number 将是唯一的 我怎样才能优雅
  • VIM 自定义箭头键映射不适用于窗口切换?

    我一直在尝试创建一个在 vim 中打开的窗口拆分之间切换的快捷方式 而不是必须使用 ctrl w arrowkey 我更愿意只能够使用 ctrl arrow key 这是我当前的 vimrc 中的内容 map
  • 如何实现hbase安全批量加载

    我已经在 kerberos 集群中的 hbase 中创建了一个批量加载 其驱动程序类与此类似 工作 public static void main String args try int response ToolRunner run HB
  • PHP 传递一个类作为引用?

    在Python中 你可以这样做 class SomeClass object pass s SomeClass someClassInstance s 如何在 PHP 中实现同样的效果 据我了解 你不能这样做吗 这是真的 您可以创建动态类名
  • 向 Pandas Dataframe 中的字符串添加前导零

    我有一个 pandas 数据框 其中前 3 列是字符串 ID text1 text 2 0 2345656 blah blah 1 3456 blah blah 2 541304 blah blah 3 201306 hi blah 4 1
  • 除非填写所有文本输入字段,否则禁用表单按钮

    我有一个具有多个文本输入的表单 我不想为每个输入添加 id 因为它们是从服务器端代码生成的 字段数量可能不同等 我只是希望能够禁用提交按钮 直到出现是输入到每个文本输入中的文本 我已经做到了这一点 但仅在文本输入到一个文本输入字段之前禁用按
  • 如何使用 boost bcp?

    我有 bcp 工具 它是用 boost 安装程序预先构建的 我想将 boost 所需的依赖项提取到一个较小的文件中 因为我希望能够在学校构建这个项目 我正在尝试使用 bcp 但我不明白如何使用它 尽管有以下说明 http www boost
  • Mongodb + Node.js:删除多个文档并返回

    我使用下面的代码一次删除多个文档 db collection testcollection deleteMany id in 1 2 3 function error response 有没有办法一次性删除并返回所有已删除的文档 NOTE
  • 使用 C# 自定义属性进行异常和审计跟踪日志记录

    是否可以创建一个自定义功能来捕获由自定义属性设置的方法中发生的异常 我打算做这样的事情 Logging FeatureEnum SomeFeature IntentEnum SomeIntent some comment public vo
  • 如何构建Graceful Degradation AJAX网页?

    我想用 优雅降级 构建网页 即 即使JavaScript被禁用 网页也能正常工作 现在我必须对 AJAX 响应的格式做出设计决策 如果禁用 javascript 则对服务器的每个 HTTP 请求都会生成 HTML 作为响应 浏览器将刷新并显