将带有参数的成功回调函数传递给另一个执行AJAX调用的函数

时间:2019-10-17 01:35:28

标签: javascript jquery ajax

我是javascript的新手,正在尝试了解是否可能发生以下情况:

假设我在代码中的多个位置(具有不同的成功回调函数-仅在此示例中为handleSuccessCallback())以及不同的url和数据请求参数中使用了以下ajax请求构造:

  jQuery.ajax({
        type: 'GET',
        url: loadUrl,
        data: data,
        error: errorCallback,
        success: function(response) {
            this.handleSuccessCallback(response);
        }
    }); 

function handleSuccessCallback(response) {
     Do something with response here...
}

我想以这种方式重构此代码,这样我就不需要在每次发送请求时都在上面创建构造。我想在utils类中创建一个函数,该函数将接收url,请求数据和错误/成功回调。像这样:

 function sendAjaxRequest(url, data, errorCallback, successCallback)
  jQuery.ajax({
        type: 'GET',
        url: url,
        data: data,
        error: errorCallback,
        success: successCallback
  }); 
 }

然后,我想多次调用此函数,并从主脚本传递不同的参数。

在我的主要代码中:

var url = "https://some url";
var data = {};
var errorCallback = handleErrorCallback();
var successCallback = handleSuccessCallback(); // ??? This function requires `response` argument being passed, how it can be done?

utils.sendAjaxRequest(url, data, errorCallback, successCallback);


function handleSuccessCallback(response) {
     Do something with response here...
}

function handleErrorCallback() {
     Do something with error here...
}

但是,我不理解的是以下内容: 如果我的handleSuccessCallback(response)需要由成功Ajax回调本身(sendAjaxRequest())导致的参数,如何将成功回调函数(handleSuccessCallback(response))传递给response函数?< / p>

如果我还不知道ajax调用中的response是什么,如何在将handleSuccessCallback()参数传递给sendAjaxRequest()时传递给response? / p>

1 个答案:

答案 0 :(得分:1)

当您想打电话时:

function sendAjaxRequest(url, data, errorCallback, successCallback)

您只需要提供errorCallbacksuccessCallback的函数名称。您正在传递函数引用,因此它们可以被其他代码调用。就像在原始示例中一样,在调用这些函数的位置提供了参数:

success: function(response) {
        this.handleSuccessCallback(response);
    }

这里是ajax中定义的成功函数,其第一个参数为response,因此您在此处拥有一个匿名函数,其第一个参数为response

因此,您只需要定义函数以匹配被ajax调用时的函数,例如:

var firstSuccessCallback = function(response) {
    //do something;
}

var firstErrorCallback = function(error) {
    //do something;
}

您可以这样做:

sendAjaxRequest(url, data, firstErrorCallback, firstSuccessCallback)