我理解渐进式增强是什么,我只是对实际完成时的一些细节不太清楚。当然,这可能是因为我看错了。让我试着用一个假设来解释我的困难:
ASP.NET MVC站点。我有一个带有选项卡式导航的视图。每个标签用于一个电影类别/类型,它显示5-10个到该类别中电影的链接。电影数据是通过Netflix的Odata获得的。
我最初的想法是,在单击每个选项卡时,使用Ajax从适当的OData GET请求中提取并解析JSON。我该如何提供它的非JavaScript版本呢?这有可能吗?
对于不需要JSON的更简单的请求-例如,让用户登录系统-我看到了如何简单地设置cookie并根据它动态更改页面以反映更改。但是,如果我需要返回并解析JSON怎么办?我如何提供替代方案?
发布于 2011-04-02 09:41:04
渐进式增强的处理是,您的服务器端必须完全能够生成出现在所有页面中的每一位HTML。这是显而易见的,因为否则(如果JS被关闭),你的应用程序中将没有能够执行上述呈现的部分。
由于服务器端必须知道如何呈现所有内容,因此在客户端根据服务器提供的JSON响应生成内容(DOM元素/HTML)没有多大意义。为什么要重复你自己呢?
这给我们带来了一个合乎逻辑的结论:在客户机上执行动态更新时,您需要从服务器获取现成的HTML (因为呈现逻辑在那里),并在适当的时候将其插入到DOM中。然后,您可以使用jQuery自由地处理新插入的元素,并根据需要对其进行增强。
所以--忘了在客户机上解析JSON吧,否则你会把自己锁在渐进式增强的门外。如果你想调用第三方,让服务器充当你的中介:调用服务器,并提供所有必要的信息,让它调用第三方,然后拿回现成的HTML。
如果这样做,那么服务器当然可以提供站点上所有内容的非JS版本,没有任何问题。实现了完全不依赖JS。
发布于 2011-04-02 09:40:25
根据定义,没有JS就没有JSON (JavaScript对象表示法)。如果没有JS,就不会进行AJAX调用。您的页面将呈现为原样,就像老式网站一样。
如果您需要逐步地执行此操作,则必须调用odata服务服务器端,并在视图数据或视图模型中为站点提供.net对象,并让视图/部分渲染它。
在have操作中,通过控制器可用的ASP.Net上下文将在以下路径上有一个属性:this.HttpContext.Request.IsAjaxRequest(),并可用于测试您是要返回视图还是只返回json数据,或者是您想要的任何类型的ActionResult。对于构建渐进式增强风格的站点来说,这是一个极好的节省时间的方法。
https://stackoverflow.com/questions/5520391
复制相似问题