【问题标题】:Recommended location of business logic after an $.ajax call$.ajax 调用后推荐的业务逻辑位置
【发布时间】:2013-06-21 20:01:36
【问题描述】:

起初,我把我所有的魔法都作为 success 函数的调用,但我才意识到可以在调用之后附加 done(...)(并且我相信也有一个准备好的)。

做生意的推荐地点在哪里?

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  success: function () { doMagic(1); },
  ready: function () { doMagic(2); },
  ...
}).done(function () { doMagic(3); });

【问题讨论】:

  • 应该是done()
  • 我不知道你从哪里得到ready - 它不在 jQuery 文档中。而success 选项与此处的.done() 相同。您为success 提供的任何内容都只会用于在使用的内部延迟对象上内部调用.done()

标签: javascript jquery ajax coding-style jsonp


【解决方案1】:

我不知道是否有“正确的方法”,但我所看到的大部分内容都建议使用.done(...),因为它更干净、更易于阅读。原因是因为它把success 函数从代码块的中间取出来进行实际的AJAX 调用。

换句话说,它更容易阅读:

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  ...
}).done(function(data){
    // SOME VERY LONG FUNCTION HERE
});

比阅读这个:

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  success: function(data){
    // SOME VERY LONG FUNCTION HERE
  },
  ...
});

也就是说,如果要调用的函数实际上做了什么重要的事情(即不仅仅是将结果转储到某个 HTML 元素中),我会使用一个命名函数并从这里引用它,在这种情况下,我认为它会更容易阅读:

function OnSuccess(data) {
    // SOME VERY LONG FUNCTION HERE
}

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  success: OnSuccess,
  ...
});

比阅读这个:

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  ...
}).done(OnSuccess);

(实际上,最好将函数(以及您的“业务逻辑”的所有)命名空间,例如Business.Model.OnSuccess,但我忽略了它,因为它不是真正的一部分答案)

【讨论】:

  • but I left that out because it isn't really part of the answer - 是的,但指出这一点是件好事。您将其与业务逻辑相关联,所以说起来还不错
  • 非常好的答案。而且,尽管离题,最后的评论应该尽可能多地发表。我自己忘记(或者太懒了)将东西放在命名空间中,因为“这只是一个小测试”。羞愧地低下头……
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2016-03-15
  • 2017-04-02
  • 2010-12-22
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多