4

我想做的是有一个默认的成功函数,所有请求都会通过,然后是一个特定的函数,其中包含用于个人调用的内容。

就像是

function handleResponse(data, func){
    if(data.error){
        display error information
    }else{
        func(data)
    }
}

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

不太确定这是否会自行工作,但我正在写这篇文章,这样你就可以理解我想要做的事情的逻辑。我想问的是,是否有一种方法可以传递这个handleResponse函数$.ajaxSetup或其他东西,这样我就可以像通常只使用一个匿名函数并handleResponse自动调用一样处理 ajax 响应?

谢谢!

4

7 回答 7

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()函数返回另一个函数,并且该函数成为成功回调。

于 2013-06-26T11:28:08.277 回答
2

恕我直言,最好的方法是使用“延迟”对象,以及在将AJAX 结果传递给您自己的回调之前预处理您的 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逻辑,还允许使用errorCheckwith$.get$.post

于 2013-06-26T11:30:00.380 回答
0

为什么不 ?

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

function handleResponse(data, callback){
   if(data.error){
      display error information
   }else{
      callback.call();
   }
}
于 2013-06-26T11:29:15.940 回答
0

尝试

$.ajax({
    url: "/path/",
    success: handleResponse
});
于 2013-06-26T11:26:17.100 回答
0

我认为这样的事情已经不存在了,但是你可以用类似的方式调用 ajax 调用

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

doAjax("/path", function () { .. } );

于 2013-06-26T11:30:30.707 回答
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/阅读更多内容

于 2013-06-26T11:33:40.517 回答
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
}
于 2019-04-01T05:00:41.383 回答