0

私は最近、ページのリロードを防ぐために、所有するフォームで AJAX を使用しようとしています。thenewboston のビデオで AJAX を学び、それを自分のフォームに合わせようとしました。

HTML:

<label for="f_name">Name:</label>
<input type="text" name="f_name" id="f_name" />
<label for="f_email">E-Mail:</label>
<input type="text" name="f_email" id="f_email" />
<label for="f_subj">Subject:</label>
<input type="text" name="f_subj" id="f_subj" /><br />
<div id="status"></div>
<button id="b_send" onClick="process()">Send</button>

JavaScript

function process() {
    var name = encodeURIComponent(document.getElementById("f_name").value);
    var email = encodeURIComponent(document.getElementById("f_email").value);
    var sbj = encodeURIComponent(document.getElementById("f_subj").value);
    if (xmlHttp.readyState == 0 || xmlHttp.readyState == 4) {
        xmlHttp.open("POST", "send.php", true);
        xmlHttp.onreadystatechange = handleServerResponse;
        xmlHttp.send("name="+name+"&email="+email+"&subj="+sbj);
    } else {
        setTimeout('process()', 1000);
    }
}
function handleServerResponse() {
    if (xmlHttp.readyState == 4) { // AJAX is ready!
        if (xmlHttp.status == 200) { // 200 = Comms went OK!
            var xmlResponse = xmlHttp.responseXML;
            var xmlDocumentElement = xmlResponse.documentElement;
            var message = xmlDocumentElement.firstChild.data;
            document.getElementById("status").innerHTML = '<span style="color:blue">' + message + '</span>';
        } else {
            alert('Something went wrong!');
        }
    }

PHP:

<?php

header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';

$name = $_POST['name'];
$email = $_POST['email'];
$sbj = $_POST['subj'];
$src = 'BETA';
$to = "someone@somewhere.com";
$subject = "CONTACT | From: " . $name . " , " . $email . " | '" . $sbj . "' | " . $src . "";
$body = "
        <html><body>
        <h4>From: ".$name." , ".$email."</h4>
        <h4>Subject: ".$sbj."</h4>
        <h5>Source: BETA</h5>
        </body></html>";
$headers = "From: someone@somewhere.com\r\n";
$headers .= "Reply-To: \r\n";
$headers .= "CC: \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$response = 'Error!';

if (mail($to, $subject, $body, $headers)) {
    $response = 'Sent!';
} else {
    $response = 'Error 202!';
}

echo '<response>';
echo strip_tags($response);
echo '</response>';
exit(); // I had to use exit() due to my hosting adding up code after every PHP page.
?>

ボタンをクリックすると、PHP ページが表示され、次のように表示されます。

この XML ファイルには、スタイル情報が関連付けられていないようです。ドキュメントツリーを以下に示します。

およびその下の XML コード:

<response>Sent!</response>

ならどうしよう?

4

1 に答える 1

0

メッセージは警告です。XML ドキュメントはデータ構造ですが、内部にはプレゼンテーションやスタイルの情報は含まれていません。通常、XML ドキュメントはアプリケーション間通信で使用されるか、純粋なデータ構造として使用され、その後、追加のプレゼンテーション/スタイル情報と共に使用されてユーザーに表示されます。

次の行を使用して、データをxml形式で出力しています。

header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';

ajax 呼び出しから応答を取得しようとしている場合は、xml ヘッダーを削除し、単にecho適切な応答を使用JSONするか、データを取得するために使用します。

または、警告なしで xml ファイルを表示したい場合は、次のようにスタイルシートを xml ドキュメントに添付できます。

<?xml-stylesheet type="text/css" href="your_stylesheet.css"?>

XML スタイルシート リファレンス: http://www.w3.org/TR/xml-stylesheet/

于 2013-09-01T05:15:04.273 に答える