繁体   English   中英

使用从AJAX传递的数据编辑XML文件-删除XML数据

[英]Editing XML file with Data passed from AJAX - XML data is being deleted

我正在一个项目中,我将从Google Maps API读取数据并将其转换为每个对象的XML,然后将该XML存储在数组插槽中(这将发生多次,直到读取所有数据为止),然后向PHP文件发送Ajax POST请求,发送完整的XML数组和一个布尔值(以使服务器知道它是哪个请求)。 然后,PHP将使用SimpleXML进行加载,使用接收到的数据编辑XML,然后将其保存。

我的问题是,当我发出ajax请求时,Firebug将识别POST请求,并且正在发送所有正确的数据。 它抛出302 (错误?)并说“ Moved Temporarily然后发生GET请求(我认为这是由服务器初始化的),该请求输出一个错误,提示Undefined inded: ajax我询问布尔值(称为ajax)的行上的ajax是真的。 然后,当我检查我的XML文件时,所有数据都被删除(该文件仍然存在,但其中不再包含任何XML),我对于如何解决此问题感到非常困惑,而且我不确定该怎么做。 这是我的一些相关代码。

非常感谢您可以提供的任何帮助。 任何帮助都将非常有帮助!

另外,如果您需要我澄清任何事情,请随时发表评论。

javascript

function sendData(result)
{
    $.ajax(
    {
        type:'POST',
        url:'getXML.php',
        traditional: false,
        data:
        {
            //Result is an array full of XML
            'myXML': result,
            //The ajax boolean is for letting the PHP know that it is this request
            'ajax' : true
        },
        success: function(data)
        {
            $('#output').text(data);
        }
    })
}

的PHP

<?php
    //Set error reporting
    ini_set('display_errors', 1);
    ini_set('log_errors', 1);
    ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
    error_reporting(E_ALL);

    //Checks if the get request is from the AJAX call
    if($_POST['ajax'])
    {
        //////////////////////////////Code for editing XML/////////////////////////////////////////
        //Checks to see if the xml file exists.
        if (file_exists('business.xml')) 
        {
            //Loads the XML file
            $xml = simplexml_load_file('business.xml');
            $result = $_POST['myXML'];
            //Append XML to existing file using data loaded in from AJAX request
            appendXML($xml, $result);   
        } 
        else 
        {
            //Loading XML has failed
            exit('Failed to open business.xml.');
        }
    }

    function appendXML($xml, $xmlResult)
    {
        foreach($xmlResult as $result)
        {
            //Creates new business node
            $business = $xml ->addChild('business');

            //Adds XML to business node (Please oh dear god let this work)
            $business ->addChild($result);

            file_put_contents("business.xml", $xml);
            header('Location: getXML.php');

        }
    }
?>

您遇到的问题与此行有关:

header('Location: getXML.php');

在页面的第一次运行中,一切工作正常,并调用了appendXML代码块。 当发生这种情况时,您正在将标题重定向到同一页面(我不确定为什么)。 发生这种情况时,页面会重新加载,但是在新页面中,不会设置您之前设置的帖子数据。 结果$ _POST为空,而if语句失败,进一步的$ _POST ['myXML']也为空,这将清空您的XML。

如果出于某种原因需要重新加载页面,请考虑创建会话并将值存储在会话变量中。 您还应该查看如何清理传入的数据,因为当前代码存在一个漏洞,有人可以将从浏览器传入的任何信息注入到服务器上的XML文件中。 这可能没什么大不了的,但我一直担心让某人直接将未转义的任何内容写入系统中的文件。 如果没有其他人可以利用此恶意地最大化驱动器上的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM