【问题标题】:I am trying to change the text in a node in an xml document with jquery and php我正在尝试使用 jquery 和 php 更改 xml 文档中节点中的文本
【发布时间】:2012-01-14 16:53:13
【问题描述】:

我有一个这样开头的 xml 文件:

<employee id = "msarapin">
    <login>msarapin</login>
    <name>Marvin I Sarapin, Ph.D.</name>
    <title>Department Head</title>
    <position>Administration</position>

我想在单击提交按钮时使用 jquery 更改“名称”节点内的文本。

这是我的 jquery 代码:

$('#submitUpdate').click(function(){
    $.ajax({
        type: "GET",
        url: "db.xml",
        dataType: "xml",
        success: function(xml)
        {
            $(xml).find('employee[id$='+"<?php echo($_GET["id"]); ?>"+']').each(function(){
                $(this).find('name').each(function(){
                    $(this).text("New Name");
                    $.post('saveXml.php', { xml: $(xml)}, function(data){alert("Data Loaded: " + data);});
                });
            });
        }
    });
});

这是我的 saveXml.php 代码:

<?php
$xml = $_POST['xml'];
$file = fopen("db.xml","w");
fwrite($file, $xml);
fclose($file);
echo "ok";?> 

我不断收到此错误:

Error: uncaught exception: [Exception... "Could not convert JavaScript argument"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js :: <TOP_LEVEL> :: line 18"  data: no]

【问题讨论】:

    标签: php jquery xml post text


    【解决方案1】:

    这里有几个问题,但我敢打赌,让你绊倒的是

    $.post('saveXml.php', { xml: $(xml) } ... );
    

    看起来您希望$(xml) 将 XML 作为字符串回显,但实际上它是一个 jQuery 对象,您的错误可能是由于 jQuery 对象不可序列化的事实。您需要使用.html(),这意味着您需要将 XML 对象包装在另一个节点中,如下所示:

    var xmlString = $('<div/>').append(xml).html();
    $.post('saveXml.php', { xml: xmlString } ... );
    

    另一个问题是你的.each() 循环,这更像是一个风格问题而不是实际错误。如果您有多个&lt;employee id="this_id"&gt; 节点,或者如果该节点有多个&lt;name&gt; 节点,那么您调用$.post() 的频率超出了您的需要。如果每个节点只有一个,则不需要嵌套的 .each() 方法。无论哪种方式,您都可以像这样选择:

    $(xml)
        .find('employee[id$='+"<?php echo($_GET["id"]); ?>"+']')
        .find('name')
        .text("New Name");
    $.post( ... );
    

    【讨论】:

    • 非常感谢您的快速响应。我可以说它现在正在发布并尝试写入,但我不断收到此错误:错误:未捕获的异常:[异常...“节点无法插入层次结构中的指定点”代码:“3” nsresult: "0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)" 位置: "ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js Line: 18"]
    • 你能得到任何关于错误的堆栈跟踪吗?我的猜测是包装代码有问题:$('&lt;div/&gt;').append(xml) - 但我不确定如何调试。你可以试试dataType:"text" 看看是否能解决任何问题——jQuery 可能会对xml 数据产生一些魔力,阻止它被附加到 HTML DOM 元素。
    猜你喜欢
    • 2021-04-30
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多