我是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>
答案 0 :(得分:1)
当您想打电话时:
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)