Jquery ajax默认成功函数与自定义函数

时间:2013-06-26 11:22:49

标签: jquery ajax

我想做的是有一个默认的成功功能,所有请求都会通过,然后是一个特定的功能,包含个别来电的内容。

这样的东西
function handleResponse(data, func){
    if(data.error){
        display error information
    }else{
        func(data)
    }
}

$.ajax({
    success: handleResponse(data, function(){
        Individual request callback function
    })
});

不太确定这是否可以单独使用,但我写这篇文章是为了让你能够理解我的目标。我想问的是,如果有一种方法可以在handleResponse中传递这个$.ajaxSetup函数,那么我就可以像通常只使用一个匿名函数一样处理ajax响应并且{{} 1}}自动调用?

谢谢!

7 个答案:

答案 0 :(得分:3)

当jQuery调用你的成功处理程序时,它不希望传递类似这样的函数,但是你可以执行以下操作:

function makeResponseHandler(func){
    return function(data) {
       if(data.error){
          // display error information
       }else{
          func(data);
       }
    };
}

$.ajax({
    success: makeResponseHandler(function(){
        //Individual request callback function
    })
});

success: ...行会立即调用makeResponseHandler()函数,并将其传递给您的个人匿名函数。然后makeResponseHandler()函数返回另一个函数,该函数成为成功回调函数。

答案 1 :(得分:2)

恕我直言,最好的方法是使用“延迟”对象,以及在将它们传递给你自己的回调之前预处理你的AJAX结果的函数:

function errorCheck(data) {
    if (data.error) {
        // display errors
        ...
        return $.Deferred().reject();  // "fake" a failure
    } else {
        return arguments;
    }
}

用法:

$.ajax(...).then(errorCheck).done(function(data) {
    // normal callback function processing
    ...
}).fail(function() {
    // called if AJAX fails, or if data.error is set
    ...
});

这使您可以根据每次通话决定是否要使用errorCheck逻辑,还允许errorCheck使用$.get,{{1}等等。

答案 2 :(得分:0)

$.ajax({
    url: "/path/",
    success: handleResponse
});

答案 3 :(得分:0)

为什么不呢?

$.ajax({
    url: "/path/",
    success: function(data){
       handleResponse(data, function(){
       });
    }
});

function handleResponse(data, callback){
   if(data.error){
      display error information
   }else{
      callback.call();
   }
}

答案 4 :(得分:0)

我不认为这样的事情已经存在了,但是你可以用像

之类的东西来调整ajax调用
function doAjax(url, callback) {
  $.ajax({
    url: "/path/",
    success: function (...) {
      handleResponse();
      callback();
    }
  });
}
  

doAjax(“/ path”,function(){..});

答案 5 :(得分:0)

$(document).ajaxcomplete(function(){
//This function is executed on every ajax call completion.
});

然后,您只需按照自己的意愿执行请求即可...

$.ajax({
    url: "/path/",
    success: function(){
        //My handler for this call.
    }
});

您可以在http://api.jquery.com/category/ajax/global-ajax-event-handlers/

了解更多信息

答案 6 :(得分:0)

这是进行常见ajax验证的简单方法。

$.ajax({
   success: function(data){
                alert("Hi");
//DO WHATEVER VALIDATIONS YOU WANT TO DO HERE
                ajaxPostSuccess(data);
            }
});

function ajaxPostSuccess(data){
//DO THE REMAINING HERE
}