0

私は、Google マップ API からデータを読み取り、オブジェクトごとに XML に変換し、その XML を配列スロットに格納するプロジェクトに取り組んでいます (これは、すべてのデータが読み取られるまで複数回発生します)。 XML とブール値でいっぱいの配列を送信する PHP ファイルへの Ajax POST 要求 (サーバーにそれがどの要求であるかを知らせるため)。次に、PHP は SimpleXML を使用して読み込み、受信したデータで XML を編集し、保存します。

私の問題は、私が ajax リクエストを行うと、Firebug がリクエストを認識し、POSTすべての正しいデータを送信していることです。302(エラー?) というメッセージがスローされ、(サーバーによって開始されたと思われる) 要求が発生しMoved Temporarily、ブール値 (ajax と呼ばれる) が true かどうかを尋ねる行にエラーが出力されます。そして、XML ファイルを確認すると、すべてのデータが削除されています (ファイルはまだ存在しますが、XML はもうありません)。これが私の関連コードの一部です。GETUndefined inded: ajax

あなたが提供できる助けを事前に感謝します。どんな支援も非常に役に立ちます!

また、何か明確にする必要がある場合は、お気軽にコメントしてください。

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