javascript jQuery AJAX 自定义函数和自定义回调?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12821142/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 17:11:41  来源:igfitidea点击:

jQuery AJAX custom function and custom callback?

javascriptjqueryajaxjquery-callback

提问by Barrie Reader

Heylow everyone!

大家好!

I have an ajax()call like so:

我有一个ajax()这样的电话:

$.ajax({
  type: "post",
  url: "whatever.php",
  data: {
    theData: "moo moo"
  },
  success: function(data) {
    console.log(data);
  }
});

Is it possible to wrap this inside a custom function butretain the callback?
Something like:

是否可以将其包装在自定义函数中保留回调?
就像是:

function customAjax(u, d, theCallbackStuff) {
  $.ajax({
    type: "post",
    url: u,
    data: d,
    success: function(data) {
      //RUN theCallbackStuff
    }
  });
}

theCallbackStuffwill be something like:

theCallbackStuff将是这样的:

var m = 1;
var n = 2;
alert(m + n + data);

回答by prodigitalson

EDIT:

编辑:

Got a recent upvote for this and I feel compelled to state that I would no longer do it this way. $.ajaxreturns a promiseso you can do pretty much what i just did here in a more consistent and robust way using the promise directly.

最近得到了一个赞成票,我不得不声明我不会再这样做了。$.ajax返回 apromise以便您可以直接使用 promise 以更一致和更健壮的方式完成我刚刚在这里所做的工作。

function customRequest(u,d) {
   var promise = $.ajax({
     type: 'post',
     data: d,
     url: u
   })
   .done(function (responseData, status, xhr) {
       // preconfigured logic for success
   })
   .fail(function (xhr, status, err) {
      //predetermined logic for unsuccessful request
   });

   return promise;
}

Then usage looks like:

然后用法如下:

// using `done` which will add the callback to the stack 
// to be run when the promise is resolved
customRequest('whatever.php', {'somekey': 'somevalue'}).done(function (data) {
   var n = 1,
       m = 2;

   alert(m + n + data);
});

// using fail which will add the callback to the stack 
// to be run when the promise is rejected
customRequest('whatever.php', {'somekey': 'somevalue'}).fail(function (xhr, status, err) {
   console.log(status, err);
});

// using then which will add callabcks to the 
// success AND failure stacks respectively when 
// the request is resolved/rejected
customRequest('whatever.php', {'somekey': 'somevalue'}).then(
  function (data) {
     var n = 1,
         m = 2;

     alert(m + n + data);
  },
  function (xhr, status, err) {
     console.log(status, err);
  });


Sure i do this all the time. You can either execute the callback within the actual success callack or you can assign the callback as the success callback:

当然我一直这样做。您可以在实际成功回调中执行回调,也可以将回调指定为成功回调:

function customRequest(u,d,callback) {
   $.ajax({
     type: "post",
     url: u,
     data:d,
     success: function(data) {
        console.log(data); // predefined logic if any

        if(typeof callback == 'function') {
           callback(data);
        }
     }
  });
}

Usage would look something like:

用法如下所示:

customRequest('whatever.php', {'somekey': 'somevalue'}, function (data) {
   var n = 1,
       m = 2;

   alert(m + n + data);
});

回答by Milton Filho

    function customAjax(u, d, theCallbackStuff) {
      $.ajax({
        type: "post",
        url: u,
        data: d,
        success: theCallbackStuff 
      });
    }

customAjax(url, data, function(data){
//do something
});

回答by Barry Chapman

On this note, you can pass a complete function as a callback to this:

在此注释中,您可以将一个完整的函数作为回调传递给:

function customRequest(u,d,callback) {
   $.ajax({
     type: "post",
     url: u,
     data:d,
     success: function(data) {
        console.log(data); // predefined logic if any

        if(typeof callback == 'function') {
           callback(data);
        }
     }
  });
}



// Then call it as follows:

function initiator() {

    customRequest( '/url/to/post', 'param1=val', function() { alert( 'complete' ); })

}

Simply passing it as an anonymous function will work too.. Just for the sake of showing :)

简单地将它作为匿名函数传递也可以。只是为了显示:)