我正在调用一个函数,该函数对 URL 进行 ajax GET
操作,如下所示:
// parameters = url, callback, boolean
that.mapUrl( window.location.search, function(spec) {
console.log("initial mapping done");
console.log(spec);
// do stuff
}, true);
mapUrl
将触发 Ajax 请求。在 Ajax done
或 success
处理程序中,我想触发我的回调函数,但这样做是这样的:
$.ajax({
method: 'GET',
url: obj[1],
context: $('body')
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log("FAILED");
configuration = {
"errorThrown":errorThrown,
"textStatus": textStatus,
"jqXHR": jqXHR
}
}).done(function(value, textStatus, jqXHR) {
console.log("OK");
console.log(callback) // undefined!
configuration = {
"value":value,
"textStatus": textStatus,
"jqXHR": jqXHR
}
});
问题:
所以我想知道如何将我的回调函数传递到 ajax
done-callback
中。知道如何做到这一点吗?
谢谢!
编辑
这是完整的 mapURL
函数
that.mapUrl = function (spec, callback, internal) {
var key,
obj,
parsedJSON,
configuration = {"root" : window.location.href};
if (spec !== undefined && spec !== "") {
obj = spec.slice(1).split("=");
key = obj[0];
console.log(key);
switch (key) {
case "file":
$.ajax({
method: 'GET',
url: obj[1],
context: $('body')
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log("FAILED");
configuration = {
"errorThrown":errorThrown,
"textStatus": textStatus,
"jqXHR": jqXHR
}
}).done(function(value, textStatus, jqXHR) {
console.log("OK");
configuration = {
"value":value,
"textStatus": textStatus,
"jqXHR": jqXHR
}
});
break;
default:
// type not allowed, ignore
configuration.src = [];
break;
}
}
return configuration;
};
最佳答案
通常,保留“promise”接口(interface)比将回调传递到代码中更好。这将使您能够更好地捕获错误情况。
function mapUrl(url) {
return $.ajax(...)
.fail(...)
.then(function(data) {
// preprocess data and return it
});
}
使用 .then
您可以在返回的数据传递给回调之前对其进行操作:
mapUrl(...).done(function(data) {
// data has been preprocessed
...
});
如果 AJAX 调用失败,此时您也可以链接其他 .fail
处理程序,但当前的 API 不允许这样做。例如,这种“关注点分离”可以让您放置更好的错误处理 UI,而不会使您的 AJAX 代码与 UI 相关代码变得困惑。
关于javascript - 如何将回调函数传递到 $.ajax.done 回调中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024376/