jQuery事件ajax调度

时间:2012-08-04 19:33:03

标签: javascript jquery

在jQuery中是否有一种巧妙/简便的方法来识别某些常规ajax事件的标识符?

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

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

  • beforeSend
  • 成功
  • 完整
  • 错误

所以模块有这个代码(以及其他东西):

 $.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
});

2 个答案:

答案 0 :(得分: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全局。

答案 1 :(得分: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事件对象。