0

我已经为同一个项目发布了另一个问题,该问题得到了有益的回答,但我似乎遇到了另一个问题,该问题似乎足够不同,因此需要一个单独的问题。任何帮助将不胜感激,如果您能提供任何帮助,请提前感谢您。

好的,首先让我描述一下我在做什么。我正在使用带有位置库的 google Maps Javascript v3 API 来查找附近的餐馆和一些关于它们的额外信息。每个搜索结果(在本例中为餐厅)的数据都存储在 JSON 对象中。现在一位同事需要这些 XML 格式的数据并存储在我们的 Web 服务器上,以便他的程序可以访问和读取它。所以我使用 jQuery JSON2XML 插件 ( http://goessner.net/download/prj/jsonxml/ ) 将该 JSON 转换为 XML 字符串。然后我使用 jQuery ajax 函数将数据推送到应该保​​存它的 php 文件中。这是javascript代码:

function sendData(result)
{
    $.ajax(
    {
        type:'POST',
        url:'getXML.php',
        data:
        {
            'myXML': result,
            'ajax' : true
        },
        success: function(data)
        {
            $('#output').text(data);
        }
    })
}

然后从那里数据应该被发送到我的 PHP 文件 (getXML.php),我编写的代码将打开一个现有的 XML 文件(在 PHP5 中使用 SimpleXML),然后附加来自 AJAX 调用的 XML。然后它将保存 XML 文件,这一切都将在每家餐厅再次发生。(所以它将向服务器发送多个 AJAX POST 请求。)这是我的 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');

            //Append XML to existing file using data loaded in from AJAX request
            appendXML($xml);    
        } 
        else 
        {
            //Loading XML has failed
            exit('Failed to open business.xml.');
        }
    }

    function appendXML($xml)
    {
        //Creates new business node
        $business = $xml ->addChild('business');

        //Adds XML to business node (Please oh dear god let this work)
        $business ->addChild($_POST['myXML']);

        file_put_contents("business.xml", $xml);
        header('Location: form_upload.php');
    }
?>

好的,这有点多,但让我进入我告诉你我的问题的部分。我是 PHP 新手,所以我不完全确定这里出了什么问题,但是当我将数据发布到服务器时,每个 ajax 请求都会出现两个错误。

第一个是:

PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: business.xml:1: parser error : Document is empty in /home/mpn3712/www/309/gPlaces/getXML.php on line 16

第二个是

PHP Fatal error:  Call to a member function addChild() on a non-object in /home/mpn3712/www/309/gPlaces/getXML.php on line 31

再次感谢大家的帮助!

4

1 回答 1

1

$xml中引用时不在范围内appendXML()。您需要通过参数传递它。

另外,一定要exit()在你写一个Location标题之后。

if (file_exists('business.xml')) 
{
    //Loads the XML file
    $xml = simplexml_load_file('business.xml');

    //Append XML to existing file using data loaded in from AJAX request
    appendXML($xml);    
} 
. 
. 
.
function appendXML($xml)
{
    //Creates new business node
    $business = $xml ->addChild('business');

    //Adds XML to business node (Please oh dear god let this work)
    $business ->addChild($_POST['myXML']);

    file_put_contents("business.xml", $xml);
    header('Location: form_upload.php');
    exit();
}

这是 PHP 手册中关于变量范围的文档。

于 2012-08-24T19:39:02.213 回答