这是我第一次使用ajax,这是我从新的波士顿网站上学习的。 但是我收到以下错误
第6 列第 8 行出现错误:仅在文档开头允许 XML 声明
我尝试删除通常似乎是修复的空格,但这不起作用。任何建议都会很棒。
<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '<response>';
$staus;
$email_in_use = $_GET['email'];
$query = mysqli_query($link, "SELECT * FROM emails WHERE email='".$email_in_use."'");
if(mysqli_num_rows($query) > 0){
$staus = false;
return $status;
}else{
// do something
if (!mysqli_query($con,$query))
{
die('Error: ' . mysqli_error($con));
}else{
$staus = true;
return $status;
}
}
echo '</response>';
?>
脚本中存在许多问题。
首先,$staus
不是$status
:统一的变量名。
但核心问题是你的脚本永远不会输出一个正确的XML文件:
if (!mysqli_query($con,$query))
{
die('Error: ' . mysqli_error($con));
}else{
$staus = true;
return $status;
}
die()
和return
停止脚本执行,因此不会打印结束</response>
标记。
顺便说一句,您的错误与示例中的代码无关,除非您在声明之前有空白行或其他内容<?php
。
以你的方式输出XML不是一个好主意,最好将执行代码和输出分开。像这样:
$email_in_use = $_GET['email'];
(...)
if( !mysqli_query( $con, $query ) )
{ $status = mysqli_error( $con ); }
else
{ $status = 'OK'; }
header( 'Content-Type: text/xml' );
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '<response>';
echo '<status>'.$status.'</status>';
echo '</response>';
尾注:为了保证正确的XML,我建议您使用XML解析器。使用SimpleXML,即,你可以这样写:
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes" ?><response><status/></response>');
$xml->response->status = $status;
echo $xml->asXML();
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
这应该是页面的第一行。XML 希望这是第一行;没有例外。
附言。如果删除header('Content-Type: text/xml');
它会起作用。
我认为这里发生的事情是这条线干扰了开头的 xml。