javascript错误记录器正在传递重试功能,我想记录其详细信息

问题描述 投票:0回答:1

我有一堆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, "&lt;").replace(/>/g, "&gt;"));
    $("#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个参数,它仍会告诉我的错误记录器传递给它的内容。)

javascript parameter-passing
1个回答
0
投票

您可以像这样分隔出回调的参数以分开参数

   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, "&lt;").replace(/>/g, "&gt;"));
    $("#ErrorModal").modal("show");
}
© www.soinside.com 2019 - 2024. All rights reserved.