使用自定义函数作为另一个函数的参数

Using custom function as parameter for another

本文关键字:函数 参数 另一个 自定义函数      更新时间:2023-09-26

我目前正在处理重构我的代码,并尝试自动化AJAX请求,如下所示:

目标是有一个独立于上下文的函数来启动AJAX请求。根据上下文对收集的数据进行不同的处理。

这是我的功能

function ajaxParameter(routeName, method, array, callback){
//Ajax request on silex route
var URL = routeName;
 $.ajax({
  type: method,
  url: URL,
  beforeSend: function(){
    DOM.spinner.fadeIn('fast');
  },
})
.done(function(response) {
    DOM.spinner.fadeOut('fast');
    callback(response);
 })
 .fail(function(error){
    var response = [];
    response.status = 0;
    response.message = "Request failed, error : "+error;
    callback(response);
 })
}

我的问题主要来自于我的回调函数没有定义。我想这样调用函数(示例)

ajaxParameter(URL_base, 'POST', dataBase, function(response){
    if(response.status == 1 ){
        console.log('Request succeeded');
    }
    showMessage(response);
});

我想将响应返回到一个变量,稍后再处理它,但如果请求失败或很慢,这将不起作用(因为响应将没有设置)。

这个版本将使我受益于.done().fail()

编辑:所以没有错误,我改变了我的代码一点。目标是能够处理在.done().fail()上下文中使用的回调函数(两个单独的函数也可以在我的情况下工作)。

据我所知,你的脚本真的没有什么问题。我在这里稍微整理了一下,但它本质上是你之前的东西:

function ajaxParameter (url, method, data, callback) {
    $.ajax({
        type: method,
        url: url,
        data: data,
        beforeSend: function(){
            DOM.spinner.fadeIn('fast');
        }
    })
    .done( function (response) {
        DOM.spinner.fadeOut('fast');
        if (callback)
            callback(response);
     })
     .fail( function (error){
        var response = [];
        response.status = 0;
        response.message = "Request failed, error : " + error;
        if (callback)
            callback(response);
     });
}

现在我们在JSFiddle上测试一下

如您所见(使用JSFiddle AJAX API),它可以工作。所以问题可能是与其他东西在你的脚本。你确定你在这里发布的脚本与你在开发环境中使用的脚本相同吗?

关于你的错误;一定要确保以正确的顺序将正确的参数传递给ajaxParameter函数。这是我在小提琴中传递的内容:

  • url端点(例如http://example.com/)
  • 方法(例如'post')
  • 一些数据(例如{foo:'bar'})
  • 回调(例如function(response){};)

你的意思是这样吗,传递成功和失败回调:

function ajaxParameter(routeName, method, array, success, failure) {
    //Ajax request on silex route
    var URL = routeName;
    $.ajax({
        type: method,
        url: URL,
        beforeSend: function () {
            DOM.spinner.fadeIn('fast');
        }
    }).done(function (response) {
          DOM.spinner.fadeOut('fast');
          success(response);
    }).fail(function (error) {
          var response = [];
          response.status = 0;
          response.message = "Request failed, error : " + error;
          failure(response);
    })
}

被称为:

ajaxParameter(
   URL_base, 
   'POST',
   dataBase, 
   function(response){
       //success function
   }, 
   function(response){
       // fail function
   }
);