AJAX-PHP;XML-POST请求指向PHP文件,而不是停留在原始页面

AJAX - PHP & XML - POST request is directing to the PHP file instead of staying at the original page

本文关键字:停留在 原始 文件 XML-POST 请求 PHP AJAX-PHP      更新时间:2023-09-26

我最近一直在尝试以我拥有的形式使用AJAX,以防止页面重新加载。我通过newoston的视频学习了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>

那现在怎么办?

该消息是一个警告。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/