【问题标题】:Error callbacks in specialized jQuery AJAX functions专用 jQuery AJAX 函数中的错误回调
【发布时间】:2010-01-16 22:26:58
【问题描述】:

我是 Prototype 的长期用户,总体上非常满意。由于社区的大力支持,我最近改用 jQuery,基本上是一致的选择和事实上的行业标准。从那以后我就没有这么开心了。是的,我已经阅读了比较线程,并且我可以在没有移植的 Ruby/Rails 便利功能的情况下生活,例如first()last()inspect()collect() 等,我重新熟悉了自己选择语法,甚至必须同意它可以很强大。但我不得不说,我对$.post()$.get(),甚至整个表单插件都没有错误回调感到失望?!

当你需要错误回调时,jQuery 中的标准真的是使用准系统 ajax 方法吗?我的 ajax 表单处理程序现在是 20-25 行,而以前是 5-10 行。在真正的 Web 应用程序中不要有错误回调真的可取吗?还是我错过了什么?

【问题讨论】:

  • 您的表单处理程序是如何从 5-10 行变为 20-25 行的?能否贴一下jQuery代码,或许有更好的写法

标签: javascript jquery jquery-plugins


【解决方案1】:

使用 ajax 方法确实不应该比使用 post/get 花费更多。您必须使用不同的格式(属性/值映射),因为参数的数量是可变的,但我不认为这是繁重的。

$.post( url, data, success_cb, type )

变成

$.ajax({
   url: url,
   data: data,
   type: 'post',  // the only extra thing
   dataType: type,
   success: success_cb }
});

如果需要,您可以添加错误、完成等回调。

【讨论】:

  • 我想那么我想知道,谁在 Web 应用程序中使用 AJAX 却没有向用户提供任何有关错误的反馈?正如您自己所说,它们并没有节省太多(尽管表单插件并非如此),而且它们使验证成为不可能。即使只是在发生不可预见的服务器错误的情况下,您真的希望它静默失败吗?从这个角度来看,我很困惑它们会被包含在核心库中。
  • 在某些情况下,您并不真正关心错误,例如记录用户交互。您真的想告诉用户他对链接“foo”的点击操作没有被正确记录吗?但是对于其他任何事情,$.ajax 是要走的路
【解决方案2】:

$.post 和 $.get 是包装 $.ajax 功能的速记辅助方法。 查看 $.ajax 以查看错误回调和所有这些内容。 http://docs.jquery.com/Ajax/jQuery.ajax#options

还可以查看 ajaxEvents 以获得更通用的错误/进度处理。 例如,可以很容易地绑定到 ajaxSend 以在页面的某处显示进度指示器。 http://docs.jquery.com/Ajax_Events

【讨论】:

  • 所以错误回调应该适用于 $.get 和 $.post(和 json 等)?文档中的以下代码怎么样: // 注意:显然,当您以这种方式进行 // Ajax 调用时,只会返回“成功”。其他错误静默失败。 // 参见上面关于使用 $.ajax 的说明。
  • 只有 $.ajax 方法支持错误回调,但是来自 Prototype 我不认为你会介意对所有事情都使用 $.ajax,或者你可以编写类似于 $.get 的新函数/post 但支持错误回调,包装 $.ajax
  • 刚看到较新的文档,post 的信息专门标识了成功回调,没有提到错误回调。这至少是非常令人困惑的......
  • 可能有点令人困惑.. 但如果你看到 $.post 接受 4 个参数 url, [data], [callback], [type],而不是像 $.ajax 这样的 options 对象,那么这是有道理的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多