【问题标题】:subscribe to jQuery.ajax() success event订阅 jQuery.ajax() 成功事件
【发布时间】:2016-01-22 13:49:46
【问题描述】:

我有一个调用$.ajax 的js,如果成功,我需要做点什么。典型的实现如下:

$.ajax({
    url: "/Sales/Quotations/LinkQuotabtleItemToSites",
    type: "POST",
    success: function (data) {
        // do something
    }
});
问题是,这个 js 函数是由另一个开发人员开发的,我依赖于那个 ajax 成功调用。我想知道是否有一种简单的方法来订阅成功事件并在我自己的 js 文件中处理它

【问题讨论】:

  • 只是想确认一下,这是您想要完成项目的唯一 Ajax 调用吗?
  • 到目前为止,是的,但我不知道将来我的逻辑是否会依赖于其他 ajax 调用(业务规则更改......你看)
  • binaryintellect.net/articles/… 尝试按照上面的操作
  • “订阅”成功事件听起来是个可怕的想法。 “所以我们都是独立工作,不会覆盖彼此的更改”。我确信您确实需要使用version control。这就是全世界程序员的工作方式。请阅读这些文章:stackoverflow.com/questions/1408450/…stackoverflow.com/questions/2658/…
  • 感谢 Ram 的链接,是否可以订阅特定呼叫,然后拥有全局回调处理程序?

标签: javascript jquery ajax


【解决方案1】:

ajaxSuccess 将成为你的朋友:https://api.jquery.com/ajaxSuccess/

附加一个在 Ajax 请求成功完成时执行的函数。这是一个 Ajax 事件。

$(document).ajaxSuccess(function(event, xhr, settings) {
  console.log('hello !');
});

但是有了这个,您将监听每一个 ajax 成功事件。所以如果你只需要听一个请求,你可能需要做 dhis :

$(document).ajaxSuccess(function(event, xhr, settings) {
  if (settings.url == '/foo/bar/somefile') {
      console.log('hello !');
  }
});

【讨论】:

    【解决方案2】:

    您可以使用自定义事件:

    $('.my-link').click(function() {
      $.ajax({
        url: "/Sales/Quotations/LinkQuotabtleItemToSites",
        type: "POST",
        success: function(response) {
          $(document).trigger('mynamespace:mytrigger', [response]);
        }
      });
    });
    
    // Developer 1 listens:
    $(document).on('mynamespace:mytrigger', function (event, response) {
      console.log('Listener 1 and response is:', response);
    });
    
    
    // Developer 2 listens in some other place:
    $(document).on('mynamespace:mytrigger', function (event, response) {
      console.log('Listener 2 and response is:', response);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2014-05-01
      相关资源
      最近更新 更多