Php,XML声明只允许在文档的开头

时间:2016-03-13 13:16:33

标签: javascript php html ajax xml

这是我第一次使用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>';
?>

2 个答案:

答案 0 :(得分:0)

您的脚本中存在许多问题。

首先,$staus不是$status:统一变量名称。

但核心问题是您的脚本将从不输出Corrext 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 Parser。使用SimpleXML,即您可以这样写:

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes" ?><response><status/></response>');
$xml->response->status = $status;
echo $xml->asXML();

答案 1 :(得分:-1)

echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';

这应该是您页面的第一行。 XML希望这是第一行;没有例外。

PS。如果您删除header('Content-Type: text/xml'); 它会工作。

我认为这里发生的是这条线干扰了开放的xml。