我有一堆AJAX调用,可能会引发错误。他们每个人都调用了我设置的ShowError(e,f)函数。 e参数是错误对象,而f参数是如果用户在错误对话框(我向他们显示)上单击后重试,则将调用该函数。我已经调用了retry函数,但是我也想记录它。我可以调用f.toString()来获取重试函数的代码,但是我正在寻找代码正在使用的值,而无法找到它们。
原始电话:
function callServer(a,b,c) {
$.ajax({
type: "POST",
url: '/ajax/code/that/might/produce/an/error/',
data: JSON.stringify({ a: a, b: b, c: c }),
contentType: "application/json; charset=utf-8",
dataType: "json",
accepts: "application/json",
success: function (result) {
alert("good");
},
error: function (e) {
showError(e, function () { callServer(a, b, c); });
}
});
}
showError函数
var reTryFunction;
function showError(e, f) {
reTryFunction = f;
$("#hdnJSError").val((JSON.stringify(e)).replace(/</g, "<").replace(/>/g, ">"));
$("#ErrorModal").modal("show");
}
从用户单击ErrorModal对话框上的重试按钮时调用的重试函数
function retry()
{
$.ajax({
type: "POST",
url: '/ErrorReport',
data: JSON.stringify({ txtErrorReport: $("#txtErrorReport").val(), hdnJSError: $("#hdnJSError").val(), reTryFunction: reTryFunction.toString() }),
contentType: "application/json; charset=utf-8",
dataType: "json",
accepts: "application/json",
success: function (result)
{ },
error: function (result)
{
}
});
$("#txtErrorReport").val("");
$("#ErrorModal").modal("hide");
reTryFunction();
}
这样做,我可以有一个通用的错误处理程序,向我显示“ function(){callServer(a,b,c)}”是哪里出了问题,但我想知道a,b和c的值是什么(以一种通用的方式,因此,如果最初调用的函数传递了1或9999个参数,它仍会告诉我的错误记录器传递给它的内容。)
您可以像这样分隔出回调的参数以分开参数
error: function (e) {
showError(e, callServer, [a,b,c]);
}
然后在显示错误中您可以访问参数
即使您不知道有多少个参数,也可以使用散布运算符传递参数https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
function showError(e, f, params) {
consolelog(params);
reTryFunction = function () { f(...params); }
$("#hdnJSError").val((JSON.stringify(e)).replace(/</g, "<").replace(/>/g, ">"));
$("#ErrorModal").modal("show");
}