【问题标题】:How to log or capture information and errors when calling AJAX?调用 AJAX 时如何记录或捕获信息和错误?
【发布时间】:2016-07-28 21:07:20
【问题描述】:

我正在寻找一种方法来捕获有关 Ajax 调用的信息。我被要求查看一个使用 KnockOut 和 jQuery/Ajax 的小型网站,因为一些最终用户在处理 .gif 文件时遇到问题。

因此,查看开发人员使用 jQuery 对 API 进行 Ajax 调用的代码。我不知道如何捕获或记录用户正在搜索的内容以及任何错误。

最终用户只是回复我们说网站只是坐在那里旋转,没有任何反应。他们通常会通过手机发送屏幕截图,至少这样我可以看到他们输入的内容。

如果出现错误,有什么方法可以停止 Ajax 调用并向用户显示错误,并希望捕获一些我可以查找的详细错误信息?

这里是提交按钮的JS代码

 $("#btnSubmit").click(function (event) {
    event.preventDefault();
    self.validateDate();
    self.validateOrigin();
    self.srchMessage("No records found.")

    var origin = $("#txtOrigin").val();
    var destination = $("#txtDestination").val();
    var flightDate = $("#txtDate").val();
    var flightNo = $("#txtFlightNo").val();

    if (flightNo == '') {
        flightNo = 'ALL';
    }
    if (destination == '') {
        destination = "ALL";
    }
    if (origin == '') {
        origin = "ALL";
    }

    if (!self.orginRequired() && !self.dateRequired()) {
        var serviceUrl = webApihostName + 'apiflight/v2/flight/' + origin + '/' + destination + '/' + flightNo + '/' + flightDate;

        self.progressIcon(true);
        self.tblVisible(false);
        self.noRecordsMsg(false);
        self.flightViewModel.removeAll();

        $.ajax({
            type: 'GET',
            url: serviceUrl,
            async: false,
            jsonpCallback: 'BindData',
            contentType: "application/json",
            dataType: 'jsonp',
            error: function (e) {
                // console.log(e.message);
            }
        });
    }
    });

我阅读代码的方式是,它首先设置了一些验证JS,并将默认搜索消息设置为“未找到记录”。

然后它查看文本框并获取值或将值设置为“全部”。

然后它使用该信息创建一个名为 serviceUrl 的 API URI。

然后它打开进度 .gif 让用户知道正在发生的事情,隐藏表格以显示搜索结果,我猜想删除飞行视图模型。

然后它调用 API。

但是,如果出现错误,则不会执行任何操作。如果确实有错误,显然是有问题的。

我做了一些研究并在错误部分尝试了以下操作,但在我添加代码后的第二天,用户再次调用了同样的问题。

error: function (e, xhr) {
    self.progressIcon(false);
    self.srchMessage("Error retrieving data. " + xhr.responseText);
    self.noRecordsMsg(true);

    // console.log(e.message);
}

任何人都有一些关于如何获取或显示错误信息的示例。我很想使用 NLog 来捕获它,但我很确定这是不可能的,因为这不是服务器端的。我也不确定如何强制错误能够在我的机器上本地测试某些东西。

【问题讨论】:

    标签: javascript jquery ajax knockout.js


    【解决方案1】:

    这里有一些获取请求错误的技巧。

    error: function (xhr, textStatus, errorThrown) {
        /**** REPLACE CURRENT DOCUMENT WITH SERVER RESPONSE**/
        document.open();
        document.write(xhr.responseText);
        document.close();
    
        /**** LOGS JSON RESPONSE IF ANY ***/
        console.log(xhr.responseJSON);
    
        /**** LOGS JQUERY REQUEST STATUS. POSSIBLE VALUES: "timeout", "error", "abort", "parsererror" ***/
        console.log(textStatus);
    
        /**** LOGS HTTP ERROR IF ANY ***/
        console.log(errorThrown);
    
    }
    

    【讨论】:

    • 所以第一个会显示一个带有响应文本的弹出类型窗口,但其他的会显示控制台日志,只能使用开发人员工具 (F12) 才能看到?
    • 第一个将当前页面替换为服务器发送的页面(如果有)。其他的只有 f12 是可见的
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-08-11
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多