我应该在ajax单页结账时返回html或json

我想用一个很好的单页结账更新当前的ASP.NET webforms电子商务网站,我正在寻找一些关于如何更新数据的“最佳实践”。 该页面将包含几个部分:购物车,用户标识,付款选项,交付选项等。

如果用户更改了付款选项,则可能会导致页面其他部分发生更改,例如交付选项变得不可用且总费用发生变化。

我是否构建了我的Web服务,以便在用户更改页面上的内容时返回完整的预先计算的html? 或者我以json格式返回某种订单对象并更新需要使用javascript更新的所有不同部分?

第二个选项对我来说似乎更干净,但它对于普通页面来说太慢了吗? 或者它是否存在第三种选择?

99.9%的时间,JSON将比同等的HTML更紧凑:更小的有效载荷意味着更快地传递响应。 但更重要的原因是:

如果不同的页面想要调用您的web服务怎么办:一个想要将结果显示为列表而另一个想要将它们显示为表格,第三个想要将结果放入jgGrid? 如果您的Web服务返回HTML,则这3个页面中的2个无法使用您的服务。 如果您的webservice返回JSON,那么所有这三个页面都可以轻松使用它。

如果在部署后2个月,您的设计人员/网站所有者想要将设计从表格更改为列表,该怎么办? 如果您的Web服务返回JSON,您的设计人员可以快速轻松地进行必要的更改,可能只影响已部署系统中的1或2个文件。 但是,如果您的Web服务返回HTML,则需要编译,测试和重新部署整个Web服务,以支持这种愚蠢的小布局更改。

可能有时候返回HTML是一种必要的邪恶(没有我能想到的,但我确信有一些)。 当发生这种情况时,请帮自己一个忙,确保您的Web服务构建的HTML可以在不重新编译/重新部署整个服务的情况下进行更改。 一个严厉但有效的方法是使用ajax来调用ASPX页面。

更新:我忘了提及:即使在最慢的javascript引擎(InternetExplorer)上,我总是发现这种技术(使用JS解析JSON并相应地更新页面)来执行得非常好。

在我看来(!)它取决于你的应用程序的整体架构。 一般来说,传统Web解决方案中的最佳实践是将javascript中的逻辑数量保持在最低水平,并且仅使用javascript来更新具有布局更改等的视图。

随着新移动设备和HTML5基础解决方案的进入,这种情况正在迅速发生变化。

  • 如果你的javascript中有很多逻辑,那么返回JSON是可以的。
  • 如果几乎所有逻辑都在服务器上,则应返回HTML。
  • 如果您已经拥有完全呈现的视图,并且只想使用新信息更新其中的一小部分,请使用JSON

大多数时候,我选择最容易在给定用例中实现的内容。

我肯定会选择第二个。 返回json,然后从客户端填充控件。

我们在项目中使用这种方法。 它根本不慢,甚至在我们最复杂的页面上都没有。

你可能想看看这个:

替代文字

当然,目录和购物车上的每个操作都需要它自己的Ajax请求。 现在,如果这太简单了,那么您可以针对HTML的各个请求采用更细粒度的方法。 我发现打破HTML请求的重点通常是我开始将HTML分解为服务器上的各个模板对象; 购物车模板,目录模板和结帐模板。