2012-03-15 88 views
1

我有一个应用程序返回那里有AJAX调用服务器的众多数量。调用一个函数,每次和AJAX请求被处理,并从服务器

现在我要审读来自服务器(此要求POP操作了Ajax代码被解雇后)的响应。

所以我必须将审核响应数据的功能,唯一的问题是我怎么能得到的数据将被发送到现在分开坐的功能。

我不想做添加一行代码调用每个Ajax调用函数的艰苦工作。

是否有更简单,出通用的方式。不知何故,我可以检测到响应何时回来,然后处理响应。

同时使用传统的JavaScript方法以及系统jquery Ajax调用。 (该应用程序已经越来越从一个较长时间的变化,并已转手了很多,所以新事物得到补充,而旧的永远不会被删除)

+0

见http://api.jquery.com/extending-ajax/,http://api.jquery.com/ajaxComplete/和http://api.jquery.com/extending-ajax/ – Stefan 2012-03-15 12:07:21

+0

可能重复[jQuery的,注册一个功能,每Ajax调用独立(http://stackoverflow.com/questions/3901871/jquery-register-a-function-for-every-ajax-call-independently) – 2012-03-15 12:10:20

+0

我很同情你的代码腐情况。作为开发人员,我们太多次都必须使用其他开发人员的混乱代码,但也忘记了我们是下一个开发人员。我鼓励你,无论你忙不过来,清理这些代码!我将花费更少的时间来修复代码,然后用另一个不起眼的全面修复来维护这个混乱。 – natedavisolds 2012-03-15 12:15:26

回答

0

使用.ajaxComplete()应该足以赶上onComplete事件所做的所有AJAX请求通过jQuery。这不是你要求的吗?

$('.ajaxRequest').click(function(event) { 
    event.preventDefault(); 
    $.getJSON(
     '/echo/json/', 
     this.id, 
     function(data, textStatus, jqXHR) { 
      console.log(data, textStatus, jqXHR); 
     } 
    ); 
}); 

// Listen to all ajax requests 
$("#log").ajaxComplete(function(event, request, settings) { 
    console.log(event, request, settings); 
});​ 

查看demo

+0

使用调用ajax的传统'javascript'方式来完成这项工作。 – 2012-03-15 12:49:03

+0

不,'XMLHttpRequest'不会触发任何我知道的事件。 – Stefan 2012-03-15 13:43:35

1

与助手功能包装你Ajax调用,并用它在你的代码。

的(未经测试)例如:

MyApp = MyApp || { 
    logRequest: function _logRequest(settings, response) { 
     // Log your response 
    }, 

    ajax: function _ajax (settings) { 
     var that = this; 

     // Log attempt request here?  

     // Example of logging the success callback (do similar for error or complete) 
     if (settings.success) { 
      // A success handler is already specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); // Log the response 
       settings.success(data); // Call the original complete handler     
      }; 
     } else { 
      // No success handler is specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); 
      }; 
     } 

     return jQuery.ajax(settings); 
    } 
}; 

我赞成这个机制,我想,以减少样板地段的情况。我只需修改自己的MyApp对象的状态(为应用程序正确命名),因此它是一种接口,可以在不修改其他全局对象的情况下拦截函数调用。您还可以非常轻松地将此功能与其他功能互换,而无需随时更新您的参考,这在许多其他情况下也可能有用。