0

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

我的问题是当我发出 ajax 请求时,Firebug 会识别一个POST请求并发送所有正确的数据。它抛出一个302(错误?)说Moved Temporarily然后GET发生一个请求(我认为这是由服务器启动的),它Undefined inded: 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');

        }
    }
?>
4

1 回答 1

1

您遇到的问题是这一行:

header('Location: getXML.php');

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

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

于 2012-08-28T15:40:18.693 回答