javascript - 将带有参数的成功回调函数传递给另一个执行 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
解决方案
当你想打电话时:
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)
推荐阅读
- php - 根据购物车页面中的属性值和产品数量在 WooCommerce 中添加到购物车验证
- linux - shell 脚本 - 找到 3 次的平均值
- java - 无法在 Spring Boot 中链接 bean。服务层和控制器 REST
- c# - 尝试将消息从 C# 发布到 Slack 时出现 SSL/TSL 问题
- android - 找不到与包名称“*****.test”匹配的客户端
- vue.js - 如果存在,如何导入 nuxt 组件,否则导入默认组件
- lambda - Java8 lambda流删除对象的两个属性中具有最大值的对象
- c++ - glibmm.h:找不到这样的目录或文件
- javascript - 以新顺序反应重新渲染表
- android - 禁用 AppBarLayout 背景颜色