Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 美元.ajax调用后业务逻辑的建议位置_Javascript_Jquery_Ajax_Coding Style_Jsonp - Fatal编程技术网

Javascript 美元.ajax调用后业务逻辑的建议位置

Javascript 美元.ajax调用后业务逻辑的建议位置,javascript,jquery,ajax,coding-style,jsonp,Javascript,Jquery,Ajax,Coding Style,Jsonp,起初,我把我所有的魔法都放在了一个来自success函数的调用中,但我刚刚意识到可以在调用之后附加done(…)(我相信还有一个ready) 建议在哪里进行商业魔术 $.ajax({ url: "http://...", dataType: 'jsonp', success: function () { doMagic(1); }, ready: function () { doMagic(2); }, ... }).done(function () { doMagic(3)

起初,我把我所有的魔法都放在了一个来自success函数的调用中,但我刚刚意识到可以在调用之后附加done(…)(我相信还有一个ready)

建议在哪里进行商业魔术

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

我不知道是否有“正确的方法”,但我看到的大多数方法都建议使用
.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
  },
  ...
});
function OnSuccess(data) {
    // SOME VERY LONG FUNCTION HERE
}

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  success: OnSuccess,
  ...
});
$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  ...
}).done(OnSuccess);
而不是阅读以下内容:

$.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
  },
  ...
});
function OnSuccess(data) {
    // SOME VERY LONG FUNCTION HERE
}

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

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

$.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
  },
  ...
});
function OnSuccess(data) {
    // SOME VERY LONG FUNCTION HERE
}

$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  success: OnSuccess,
  ...
});
$.ajax({
  url: "http://...",
  dataType: 'jsonp',
  ...
}).done(OnSuccess);
而不是阅读以下内容:

$.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
  },
  ...
});
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
,但我忽略了这一点,因为这并不是答案的一部分)

它应该在
done()
中。我不知道你从哪里准备好了
,它不在jQuery文档中。而
success
选项与此处的
.done()
相同。您为
成功
提供的任何内容都只用于在内部调用
.done()
所使用的内部延迟对象
,但我忽略了这一点,因为它实际上不是答案的一部分
-是的,但要指出这是一件好事。你把它和商业逻辑联系起来,所以说一个很好的答案也不错。而且,尽管离题,最后的评论应该尽可能多地发表。我自己忘记(或者太懒了)把东西放在名称空间里,因为“这只是一个小测试”。羞愧地低头。。。