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 を初めて使用するので、ここで何が問題なのか完全にはわかりませんが、データをサーバーに POST すると、ajax リクエストごとに 2 つのエラーが発生します。

1 つ目は次のとおりです。

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

2つ目は

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 に答える