【发布时间】:2015-03-12 19:11:03
【问题描述】:
我有一个函数,它将 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="#"> </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 块不会执行。换句话说:当以无效的 XML 作为源执行所有函数时,不会执行任何控制台日志,即使您希望至少记录一个(try 或catch)。
我错过了什么吗?
【问题讨论】:
-
您是否尝试将
fail处理程序添加到您的ajax 调用? -
你可以看看DomParser。
-
@collapsar 不是只有在 ajax 加载失败时才有效吗? XML 解析只发生在
parseMech()。 -
@JacqueGoupil 不幸的是我需要 IE8 支持。
-
@BramVanroy IE 有一个 ActiveX Dom 解析器,不确定 IE8 是否有它w3schools.com/xml/xml_parser.asp
标签: javascript jquery ajax xml try-catch