这是使用jQuery将XML解析为JavaScript对象的最快方法吗?
我有这样一个XML文件:这是使用jQuery将XML解析为JavaScript对象的最快方法吗?,javascript,jquery,xml,ajax,Javascript,Jquery,Xml,Ajax,我有这样一个XML文件: <content> <box> <var1>A1</var1> <var2>B1</var2> <var3>C1</var3> <var4>D1</var4> </box> <box> <var1>A2</v
<content>
<box>
<var1>A1</var1>
<var2>B1</var2>
<var3>C1</var3>
<var4>D1</var4>
</box>
<box>
<var1>A2</var1>
<var2>B2</var2>
<var3>C2</var3>
<var4>D2</var4>
</box>
<box>
<var1>A3</var1>
<var2>B3</var2>
<var3>C3</var3>
<var4>D3</var4>
</box>
</content>
提前感谢。尽可能使用。这样,浏览器将为您进行解析,而您无需进行任何后期处理
来自服务器的JSON
{"content":
{"box": [
{"var1": "A1",
"var2": "B1",
"var3": "C1",
"var4": "D1"},
{"var1": "A2",
"var2": "B2",
"var3": "C2",
"var4": "D2"},
{"var1": "A3",
"var2": "B3",
"var3": "C3",
"var4": "D3"}]}}
客户端JavaScript
var app = {
//...
box: [],
init: function (file) {
var that = this;
$.ajax({
type: "GET",
url: file,
dataType: "json",
success: function(result) {
that.box = $.map(result.content.box, function(box, i) {
return new Box(i, box);
});
}
});
},
//...
};
我有一个被迫使用的XML源。。我在客户端将其转换为JSON,然后加载它。。容易多了
Tracker.loadCasesFromServer = function () {
$.ajax({
type: 'GET',
url: '/WAITING.CASES.XML',
dataType: 'xml',
success: function (data) {
Tracker.cases = jQuery.parseJSON(xml2json(data, ""));
Tracker.loadCasesToMap();
},
data: {},
async: true
});
})
使用可在此处找到的XML2JSON转换器:
Duncan您可以使用浏览器原生XML支持,我想这会很快。但是,这在不同的浏览器中是不同的,例如(Firefox:,IE:…)
因此,您不必继续手动处理所有浏览器,您可以使用类似这样的方法这看起来很棒,但我如何才能向创建的box对象的原型添加方法?您可以使用for…in循环将result.content.box中的所有属性复制到具有所需方法的对象中(如果您愿意,您可以在“构造函数”类型的函数中执行此操作)。它没有那么优雅。或者,您可以在success函数中自己将所有方法分配给JSON结果对象。换句话说,通常,您不能为创建的box对象提供特殊的原型。相反,您必须转换“简单的旧数据"JSON解析器以某种方式将对象转换为完全功能的版本,或者只是以过程式代码的方式使用它们。啊,我忘记了
框
实例的事情。@Walter Mundt是对的,我更新了我的答案,以展示如何操作。这非常有效,我得到的结果与我以前的方法相同t现在使用JSON,我将保留这两个方法并调用initJSON().现在我有另一个相关的问题,但我认为这应该放在新的帖子中,谢谢!谢谢,但我认为这意味着要多做一步,不会有性能提升,因为xml2json函数可能会做一些与我的方法非常相似的事情。也许在服务器上将XML解析为JSON会是一个更好的主意???实际上我是准备使用jQuery解析XML,我认为这比原生JavaScript DOM方法简单得多,并且可以处理浏览器差异。我不确定,但我认为jQuery将XML解析为常规HTML。尝试在常规XML中插入这样的内容,这完全可以,用jQuery解析它会认为它是不推荐的HTML“纯文本”,你的问题是关于性能的,所以使用本机支持应该更快!!但你永远不知道…你应该为准确的答案设定基准…干杯
Tracker.loadCasesFromServer = function () {
$.ajax({
type: 'GET',
url: '/WAITING.CASES.XML',
dataType: 'xml',
success: function (data) {
Tracker.cases = jQuery.parseJSON(xml2json(data, ""));
Tracker.loadCasesToMap();
},
data: {},
async: true
});