2

有没有办法可以处理 XML 文件并显示它

<?xml version="1.0"?>
<phonebooks>
<contacts group_name="Sample" editable="1" id="0">
<contact first_name="Extension" last_name="1000" contact_type="sip" subscribe_t$
        <numbers>
                <number dial="1620" dial_prefix="" label="Extension" primary="1$
        </numbers>
</contact>
. . . 
</phonebooks>

这就是我需要它显示的文件,就在文本区域,没什么特别的。我对大多数解决方案持开放态度。这是我到目前为止尝试过的

var textarea = $("#xml"); 

$.ajax({
    type: "GET",
    url: "http://localhost/contacts.xml",
    cache: false,
    dataType: "xml",
    success: function(xml) {
        var xmlText = new XMLSerializer().serializeToString(xml);
        textarea.text(xmlText);
    }

});

我的文本区域中没有显示,控制台中也没有任何错误。

4

2 回答 2

5

这是一个完整的示例。只需将粘贴复制到三个名为:

whateveryouwant.php
another_php_file.php(要更改名称,您还必须更改 ajax 代码(2 个位置)
contacts.xml

这个怎么运作:

第一个 ajax 代码块在 DOM 准备好后立即运行(注意:没有事件触发它,它只是运行。第二个代码块由点击事件触发)。ajax 将此 POST 发送到名为another_php_file.php的 PHP 文件: req=load。这是一个 key=>value 关联数组:“req”是 var 名称,“load”是它的值。

现在,看看another_php_file.php内部发生了什么。启动时,该文件会检查它收到的 POST 变量。如果$_POST['req'] == 'load'然后它从磁盘读取文件并回显它。这就是 AJAX 的工作原理:从指定的 PHP 处理器文件回显的任何内容都会在该 AJAX 代码块的success:函数中接收。

xml 文本如何进入 textarea 控件?再看看第一个 AJAX 代码块。还记得从 PHP 处理器文件回显的数据是在成功函数内部接收的吗?这是魔术:

success: function(result) {
    $('textarea').val(result);
}

result是一个变量(可以任意命名),包含 PHP 文件回显的内容。然后我们使用 jQuery 粘贴result到 textarea 控件中。

请注意,我没有为该 textarea 控件指定 ID。此代码假定您的页面上只有一个。如果您有多个,那么您将通过其 ID 引用所需的 textarea 控件:

    $('#myText').val(result);

的HTML:

<head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

        <script type="text/javascript">
            $(document).ready(function() {

                $.ajax({
                    type: 'POST',
                    url: 'another_php_file.php',
                    data: 'req=load',
                    success: function(result) {
                        //alert(result);
                        $('textarea').val(result);
                    }
                });

                $('#mybutt').click(function() {
                    var stuff = $('textarea').val();
                    alert(stuff);
                    $.ajax({
                        type: 'POST',
                        url: 'another_php_file.php',
                        data: 'req=save&changes=' +stuff,
                        success: function(result) {
                            alert(result);
                            //$('textarea').val(result);
                        }
                    });
                });

            }); //END $(document).ready()

        </script>
    </head>
<html>
    <body>
        <input type="button" value="Save Changes" id="mybutt" />
        <textarea id='myText'  rows="30" cols="120" value='<?php echo $xml; ?>' />
    </body>
</html>

another_php_file.php

<?php

//This necessary to prevent AJAX from automatically ESCAPING all values (e.g. "Bob" is turned into \"Bob\" )
//See http://stackoverflow.com/questions/4550036/jquery-is-automatically-escaping-ajax
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

if ($_POST['req'] == 'load') {
    $xml = file_get_contents("contacts.xml");
    echo $xml;

}else if ($_POST['req'] == 'save') {
    $d = $_POST['changes'];
    //echo $d;
    $size = file_put_contents('contacts.xml', $d);
    echo 'Wrote ' .$size. ' bytes to file. Refresh page with [Ctrl]+[F5] to see your changes.';
}

联系人.xml

<?xml version="1.0"?>
<phonebooks>
<contacts group_name="Dimple" editable="1" id="0">
<contact first_name="Extension" last_name="1000" contact_type="sip">
        <numbers>
            <number dial="1620" dial_prefix="" label="Extension" primary="1">
        </numbers>
</contact>
<contact first_name="George" last_name="Smith" contact_type="sip">
        <numbers>
            <number dial="1700" dial_prefix="" label="Extension" primary="1">
        </numbers>
</contact>
</phonebooks>
于 2013-08-13T21:53:12.690 回答
0

您应该在 ajax 请求中设置dataTypeto"text"contentTypeto "text/plain",因为您将结果视为文本。您的 ajax 请求代码如下所示:

var textarea = $("#xml"); 

$.ajax({
    type: "GET",
    url: "http://localhost/contacts.xml",
    cache: false,
    contextType: "text/plain",
    dataType: "text",
    success: function(xml) {
        textarea.text(xml);
    }

});

于 2016-01-20T20:01:49.770 回答