1

在 jQuery 中,是否有聪明的/速记方式将标识符附加到一些一般的 ajax 事件?

为了解释,我正在创建一些功能,这些功能分为两个单独的功能:模块 A 和模块 B。模块 A 以及其他一些东西主要负责 ajax 调用。模块 B 负责前端 dom 工作,在模块 a 完成并返回 ajax 调用之后。

我目前只是为每个 ajax 函数触发事件:

  • 发送前
  • 成功
  • 完全的
  • 错误

所以模块有这个代码(除其他外):

 $.ajax({
    url: 'myajaxurl',
    beforeSend : function() {
        $('#form').trigger('module_a_before_send');
    },
    success: function(response) {
       $('#form').trigger('module_a_success');
    },
    complete: function() {
        $('#form').trigger('module_a_complete');
    },
    error: function(textStatus) {
        $('#form').trigger('module_a_error');
    },
    timeout: 3000
});
4

2 回答 2

0

您可以使用 data 选项向服务器端发送一个值来识别 ajax 调用:

var data = if some event ? attach some value : if not attach other value etc,
    elem = $('#form');
$.ajax({
    url: 'myajaxurl',
    data: data,
    beforeSend : function() {
        elem.trigger('module_a_before_send');
    },
    success: function(response) {
       elem.trigger('module_a_success');
    },
    complete: function() {
        elem.trigger('module_a_complete');
    },
    error: function(textStatus) {
        elem.trigger('module_a_error');
    },
    timeout: 3000
});

如何捕获数据取决于所使用的服务器端语言,但对于 PHP 之类的语言,它将是$_POST全局的。

于 2012-08-04T19:38:01.390 回答
0

我对这个问题有点困惑。如果您需要模块之间的一些通信,您可以使用可以传递给触发器的额外数据参数(请参阅http://api.jquery.com/trigger/

$(elem).trigger('my-custom-event', {id:1})

和相应的事件处理程序

$(elem).bind('my-custom-event', function(event, data) {});

另一种方法是创建自己的自定义事件

var event = $.Event('my-custom-event',{id:1})
$(elem).trigger(event)

通过这种方式,您可以直接将地图中的属性添加到 jQuery 事件对象中。

于 2012-08-04T19:46:25.567 回答