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 回答