订阅 jQuery.ajax() 成功事件

Posted

技术标签:

【中文标题】订阅 jQuery.ajax() 成功事件【英文标题】:subscribe to jQuery.ajax() success event 【发布时间】: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。这就是全世界程序员的工作方式。请阅读这些文章:***.com/questions/1408450/… 和 ***.com/questions/2658/… 感谢 Ram 的链接,是否可以订阅特定呼叫,然后拥有全局回调处理程序? 【参考方案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);
);

【讨论】:

以上是关于订阅 jQuery.ajax() 成功事件的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax 放在重复点击事件beforeSend方法

Mailchimp 使用 jQuery AJAX 订阅?

Mailchimp API V3 jQuery Ajax POST 订阅者

Mailchimp API V3 jQuery Ajax POST 订阅者

在这个例子中,让 jQuery/Ajax 与 CodeIgniter 一起工作的最佳方法是啥?

jQuery ajax - serialize() 方法-输出序列化表单值