1

PHP で XML ファイルを生成する必要があります。このファイルは、XML 応答として AJAX 要求に返されます。しかし、実際のxmlファイルを使用しないとこれを行うことができないことに気付きました.

実際に XML であると強制する方法はありますか?生成された XML は 10 秒ごとに更新され、再度コンパイルされるため、毎回保存することはできません。

XMLを生成するPHPは次のとおりです

<?php
session_start();
include "../includes/db_connect.php";
include "../includes/required.php";

//Get the information from the database
$query = "SELECT message, id, date, messerror FROM messages WHERE dismiss = 0 LIMIT ?";
if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param("i", $settings['common']['max_errors']);
    $stmt->execute();

    //Bind variables to prepared statement
    $stmt->bind_result($message,$id,$date,$messerror);

    $doc = new DOMDocument('1.0');
    $doc->formatOutput = true;
    $root = $doc->createElement('messages');
    $root = $doc->appendChild($root);

    //Fetch values
    while ($stmt->fetch()) {
        //Create root node
        $block = $doc->createElement('msg');
        $block = $root->appendChild($block);

        //Create sub nodes for ID
        $id_node = $doc->createElement('id');
        $id_node = $block->appendChild($id_node);
        $text = $doc->createTextNode($id);
        $text = $id_node->appendChild($text);

        //Create sub nodes for date
        $date_node = $doc->createElement('date');
        $date_node = $block->appendChild($date_node);
        $text = $doc->createTextNode($date);
        $text = $date_node->appendChild($text);

        //Create sub nodes for message
        $message_node = $doc->createElement('message');
        $message_node = $block->appendChild($message_node);
        $text = $doc->createTextNode($message);
        $text = $message_node->appendChild($text);

        //Create sub nodes for message or error
        $messerror_node = $doc->createElement('messerror');
        $messerror_node = $block->appendChild($messerror_node);
        $text = $doc->createTextNode($messerror);
        $text = $messerror_node->appendChild($text);
    }
    echo $doc->saveXML()."\n";

    //Close statement
    $stmt->close();
}
$mysqli->close();
?>

生成された XML は次のとおりです。

<?xml version="1.0"?>
<messages>
  <msg>
    <id>hello</id>
    <date>14/11/2013 20:37</date>
    <message>Successfully logged in!</message>
    <messerror>message</messerror>
  </msg>
  <msg>
    <id>hello</id>
    <date>15/11/2013 00:52</date>
    <message>Successfully logged in!</message>
    <messerror>message</messerror>
  </msg>
  <msg>
    <id>hello</id>
    <date>15/11/2013 02:42</date>
    <message>Successfully logged in!</message>
    <messerror>message</messerror>
  </msg>
</messages>

JavaScript 呼び出し、おそらく間違っていますが、応答を XML として解釈していないことはわかっています。

function error_checking() {
    var http = getHTTPObject();
    http.onreadystatechange=function() {
        if (http.readyState==4 && http.status==200) {
            var x = http.responseXML.getElementsByTagName("messages");
            var xx = x[0].getElementsByTagName("msg");
            doc("test").innerHTML = xx[0].firstChild.nodeValue;
        }
    }
    http.open("GET","php/check_errors.php",true);
    http.send();
}
4

1 に答える 1

1

私は問題を見ていると思います。適切な content-type ヘッダーを送信する必要があります。

header('Content-type: text/xml');
echo $doc->saveXML();

また、PHP の終了タグ ( ?>) は不要であり、問​​題が発生する可能性があるため、削除します。

于 2013-11-15T03:12:06.040 に答える