【问题标题】:Is it possible to add,delete xml nodes with jquery $.ajax?是否可以使用 jquery $.ajax 添加、删除 xml 节点?
【发布时间】:2010-11-24 02:22:18
【问题描述】:

我想用jquery在xml中删除一些节点或者添加一些节点, 我用appendemptyremove 试试,但它们似乎都不起作用, 喜欢(在 $.ajax 中):

success:function(xml){
    $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');
    $(xml).find("layout").empty();
}

我还发现谷歌上没有教程。 所以我想知道是否可以使用 jquery 在 xml 中添加或删除节点?

好的,我详细写一下,xml文件只是保存在本地域为Database/UserConfig/config.xml 这是我的 Ajax 代码

function layout_change()
{
    var $children=$input.children();

    $.ajax({
        type: "get",
        url: "Database/UserConfig/config.xml",
        dataType: "xml",
        timeout: 2000,
        beforesend:function(xml){
            $(xml).find("layout").empty();
        },
        success:function(xml){
            for(var i=0;i<$children.length;i++)
            {
                $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');              
            }
        },
        error:function(){}
    });
}

或者它可以用javascript来完成?或者只能用像C#这样的服务器语言来完成?……

这是我的演示 xml:

<layout>
        <app id="id-4"></app>
        <app id="id-5"></app>
        <app id="id-6"></app>
        <app id="id-1"></app>
        <app id="id-2"></app>
        <app id="id-3"></app>   
</layout>

【问题讨论】:

  • 如果你可以用 javascript 做一些事情,那么它很有可能可以用 jquery 来完成
  • 但是你不应该从javascript编写或更新xml文件,文本文件,那不是好方法,javascript主要是操作DOM,获取数据并显示......,发送数据。跨度>
  • @alex ,你认为这是更新 xml 的好方法吗,如果他想要他应该使用数据属性并使用 jquery 元数据插件
  • @gov 这不是真的。 jQuery 是一个用于解析 XML 的优秀工具。
  • @alex,解析没问题,我问的是更新xml??

标签: jquery xml add


【解决方案1】:

jQuery 是用于在 javascript 中解析和操作 XML 的绝佳工具。事实上,jQuery 的 ajax API 是基于这一点构建的,这就是为什么您可以通过将 dataType 参数设置为 xml 来指定 ajax 调用的响应类型(尽管它们确实尝试做一些自动检测是否省略此参数)。来自 dataType 参数的 jQuery $.ajax() 文档:

"xml":返回一个 XML 文档,可以 通过 jQuery 处理。

您可以使用 jQuery 尽可能多地解析和操作 XML。我必须补充一点,与服务器端 XML 库中的 XPath 查询相比,使用 CSS 选择器非常棒。

虽然emptyremove 按预期工作,但在使用append 之类的函数动态添加节点时存在一个问题:jQuery,无论出于何种原因(我还没有真正深入研究过这个),不会在附加到 XML 结构时为您创建元素(尽管这在 HTML 结构中可以正常工作)。您可以通过自己显式地将节点创建为 DOM 元素或 jQuery 对象然后调用 append 来轻松解决此问题:

//Either of these will work
var elem = document.createElement('app');
xml.find('layout').append(elem); // Appends <app></app> to <layout>
xml.find('layout').append($('<app>')); // Does the same

// You can also you use other manipulation functions such as `attr`
xml.find('layout').append($('<app>').attr('id', 'ego'));

但是,您的代码似乎存在其他问题,导致其无法按预期运行。例如,$.ajaxbeforeSend 回调将 XMLHttpRequest 对象传递给回调函数,而不是您要操作的 XML 对象。结果是您在该回调中的empty 调用什么也不做。

另外,如果您试图在beforeSend 回调中操纵Database/UserConfig/config.xml 的响应,它可能还不存在,因为在触发ajax 请求之前调用了beforeSend。您打算传入的 xml 参数可能是全局范围的,但它在回调的范围内被压缩,因为正如我之前提到的,jQuery 正在传入 XMLHttpRequest

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多