Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是使用jQuery将XML解析为JavaScript对象的最快方法吗?_Javascript_Jquery_Xml_Ajax - Fatal编程技术网

这是使用jQuery将XML解析为JavaScript对象的最快方法吗?

这是使用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

我有这样一个XML文件:

<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
    });