首页 > 解决方案 > 将带有参数的成功回调函数传递给另一个执行 AJAX 调用的函数

问题描述

我是 javascript 的新手,并试图了解以下事情是否可能:

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

  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))传递给sendAjaxRequest()函数,如果我handleSuccessCallback(response)需要的参数是成功 ajax 回调本身的结果(response)?

如果我还不知道from ajax 调用将是什么,我如何将这个response参数handleSuccessCallback()传递给它?sendAjaxRequest()response

标签: javascriptjqueryajax

解决方案


当你想打电话时:

function sendAjaxRequest(url, data, errorCallback, successCallback)

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

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)

推荐阅读