繁体   English   中英

解析XML catch块未捕获JS中的异常

[英]Parse XML catch block not catching exception in JS

我有一个函数,将XML文件(通过AJAX获取)作为输入,将其解析为XML,然后在其上执行一些功能。 精简版可以在下面找到。

AJAX

$.ajax({
    type: "GET",
    url: "./default.xml",
    dataType: "xml",
    success: function(data) {
        parseMech(data);
    }
});

parseMech函数

function parseMech(xml) {
    try {
        var xmlObject = $(xml);

        // See the output function below
        $(".tree.base").html(treeBuilder(xmlObject.find("node").first()));

        console.log("succes?");
    } catch(e) {
        $("#error-msg > .the-msg").text(" Invalid XML structure").parent().fadeIn(250);
        console.log("Failed");
    }
}

treeBuilder函数

function treeBuilder(nodes) {
    var newList = $("<ol>");

    nodes.each(function (x, e) {
        var newItem = $('<li><a href="#">&nbsp;</a></li>');

        for (var i = 0, l = e.attributes.length, a = null; i < l; i++) {
            // Don't forget to add properties as data-attributes
            a = e.attributes[i];
            newItem.attr("data-" + a.nodeName, a.value);
            if (a.nodeName == "cat" || a.nodeName == "word") {
                newItem.html('<a href="#">' + a.value + '</a>');
            }
        }
        if ($(this).children('node').length) {
            newItem.append(output($(this).children('node')));
        }
        newList.append(newItem);
    });
    return newList;
}

default.xml是有效的xml文件时,这应该可以正常工作。 但是,如果不是这样(例如,当我省略结束标记时),则不会执行catch blok。 换句话说:当使用无效的XML作为源执行所有功能时,即使您希望至少要记录一个日志(在trycatch ),也不会执行任何控制台日志。

我在这里想念什么吗?

您需要在ajax调用中使用fail处理程序。

根据docs ,数据类型为xml的jquery ajax调用返回xml doc,因此在ajax调用过程中将对数据流进行解析。

如下更改ajax调用(已验证行为):

    //...
    error: function() {
        console.log("ajax failed!");
    },
    //...

注意

考虑更改error处理方式和success属性,以更改指定处理程序的方式:

top.$.ajax({
    type: "GET",
    url: url,
    crossDomain: true,
    dataType: "xml",
})
    .fail ( function() {
        console.log("ajax failed!");
    })
    .done ( function(data) {
        console.log("ajax ok!");
        parseMech(data);
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM