web应用——什么时候HTTP Form POST比Ajax更可取?



我最近开始使用ajax。在此之前,我主要使用表单提交将数据发送到服务器。但是使用ajax,我觉得我们可以在大多数情况下避免表单提交。即使在那些情况下,我们需要从一个页面到另一个页面(例如,如果我想看到特定客户的详细信息点击客户链接在表中,我可以使ajax调用服务器,并获得html响应,并将其附加到当前的页面,早期是通过表单提交处理的,这也有点慢)。

所以我想知道的东西在哪里表单提交应该优先于ajax?

这实际上是一个非常广泛的问题,我将尝试更深入地回答它。

如果需要,使用常规HTTP POST而不是Ajax有以下几个原因:

  1. HTTP POST是由World指定的HTTP 1.1标准的一部分万维网联盟(W3C)因此是有效的在任何 HTTP 1.1兼容浏览器

  2. Ajax需要JavaScript支持。即使如果你的用户的浏览器支持JavaScript,不同的浏览器运行JavaScript使用

  3. Ajax需要完全不同级别的错误处理。

    让我解释一下:当用户发送POST请求到您的服务器并且发生一些错误时(例如连接丢失),用户将在浏览器中收到一个完全可见的错误,因为浏览器本身会通知用户出错了。当您使用Ajax时,必须自己编写/实现所有这些错误处理。

    示例:用户A正在访问您的博客,并希望使用您在博客上实现的Facebook OAUTH发布评论。用户在评论字段中输入评论文本,然后按下评论按钮,结果?什么也没有发生。为什么?可能有多种原因,例如失去连接,未处理的内容错误,服务器错误,兼容性错误,安全错误,如丢失/无效的服务器证书,Facebook OAUTH通信错误等。

    对HTTP POST 做同样的事情将导致用户可见的错误。

更多Ajax/JavaScript问题

  1. 当使用HTTP请求加载页面时,它在加载页面时在浏览器中是可见的。Ajax通常在页面加载之后加载,因此,浏览器不会通知用户正在加载资源。

  2. 如果你使用Ajax加载资源(例如博客文章),它们将不会被Google索引,因为Google不运行JavaScript。因此,更少的人会发现你的网站/内容。

  3. 响应式设计;Ajax繁重的站点可能是CPU和网络流量密集的站点,与使用普通的HTML相比,加载一个页面实际上需要更长的时间

不幸的是,现代网站通常真的需要JavaScript。那么,上述情况如何处理呢?

  1. 使用合适的技术(http://en.wikipedia.org/wiki/KISS_principle)

  2. 处理错误。

  3. 当使用Ajax发布时,如果您期望服务器的响应时间超过一秒,则通过显示加载动画给用户"触觉反馈"。

  4. 低调的JavaScript

    不引人注目的JavaScript允许没有启用JavaScript的用户至少在您的站点上使用基本功能。

    示例:用户A使用非javascript浏览器进入您的博客并单击评论按钮。出现一个弹出窗口,用户A在其中输入她的评论并向服务器发布常规帖子,并被重定向回您的博客帖子。用户B使用启用JavaScript的浏览器进入您的博客。在您的博客文章的正下方,有一个评论字段和一个提交按钮。用户B输入她的评论并单击提交按钮,然后将Ajax请求发送到服务器。页面更新了发布的评论,用户不必被重定向。

    基本上,不引人注目的JavaScript可以通过始终加载普通的旧HTML页面来实现。加载页面后,运行JavaScript将html元素和链接替换为JavaScript锚点和元素。这样,不允许JavaScript执行的浏览器也可以使用你的站点。

资源:

低调的JavaScript

  • http://www.ibm.com/developerworks/library/wa-aj-unobtrusive/%2F& ei = deUzUfekB6OH4AS09IFo& usg = AFQjCNGZwD9bsz52xK3zGpDQTjyGzO4EHQ
  • http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-technique/
  • http://www.searchenginepeople.com/blog/unobtrusive-javascript.html
  • http://en.wikipedia.org/wiki/Unobtrusive_JavaScript

Ajax错误处理

  • http://www.unseenrevolution.com/jquery-ajax-error-handling-function/
  • http://enterprisejquery.com/2010/09/creating-an-ajax-component-handling-errors-and-loading-notifications-with-publish-and-subscribe/
  • http://aaronsaray.com/blog/2010/08/24/how-to-handle-ajax-errors-with-jquery/
我希望这能回答你的问题!

大多数情况下,可以使用Ajax。但是请记住,它在实现上需要额外的努力。

还有,在一些情况下仍然需要表单:

  • 文件上传
  • 向其他服务器发送数据
  • 触发下载的表单

两者没有太大区别。比起常规表单,我更喜欢ajax。

无论你选择什么方法,重要的是如何保证它的安全。

例如,如果你有一个网站,你接受数据的邮寄形式。我可以做一个表格,并张贴数千行代码到你的网站,你的网站会接受,因为你不知道数据是从哪里来的。一个例子就是你网站上的注册页面。

如果你发送一个md5哈希与你的表单到用户的浏览器,并保存在会话中会更好。因此,当用户提交表单时,他/她会将哈希发送回您的服务器,然后您可以根据保存的会话值对其进行检查。然后你就会知道这是你的网站,而不是来自第三方。

最新更新