我想用php 写一个运用到ajax 的program. 但不知为何callback时, responseXML经常return null object. 以下是source codeclient side:
<html>
<head>
<title>
test for AJAX
</title>
<script type="text/javascript">
var req;
function ser(){
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET","/TestAJAX/serverSide.php",true);
req.onreadystatechange = callback;
req.send(null);
}
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
var xmlDoc=req.responseXML;
v = xmlDoc.getElementsByTagName("firstname")[0].firstChild.nodeValue;
var x = document.getElementById("rtext");
x.value = v;
}else{
alert ("Not able to retrieve description" + req.statusText);
}
}
}
</script>
</head>
<body>
<input type="text" id="rtext" size="19">
<input type="button" onclick="ser()" value="click">
</body>
</html>
server side:
<?php
header("Content-type: text/xml;charset=UTF-8");
header("Cache-Control: no-cache");echo '<?xml version="1.0" encoding="utf-8"?>';echo "<person>";
echo "<firstname>aaaaaaa</firstname>";
echo "<lastname>bbbbbbb</lastname>";
echo "<age>ccccccc</age>";
echo "<hometown>dddddddd</hometown>";
echo "<job>eeeeeee</job>";
echo "</person>";
?>
当我用Firebug 去看server 的response 时, server response 成以下的:
嚜�<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at D:\AppServ
\www\TestAJAX\serverSide.php:1) in <b>D:\AppServ\www\TestAJAX\serverSide.php</b> on line <b>2</b><br
/>
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at D:\AppServ
\www\TestAJAX\serverSide.php:1) in <b>D:\AppServ\www\TestAJAX\serverSide.php</b> on line <b>3</b><br
/>
<?xml version="1.0" encoding="utf-8"?><person><firstname>aaaaaaa</firstname><lastname>bbbbbbb</lastname
><age>ccccccc</age><hometown>dddddddd</hometown><job>eeeeeee</job></person>
看它的response,它似乎改不了个header,我想问有什么办法解决??
<html>
<head>
<title>
test for AJAX
</title>
<script type="text/javascript">
var req;
function ser(){
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET","/TestAJAX/serverSide.php",true);
req.onreadystatechange = callback;
req.send(null);
}
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
var xmlDoc=req.responseXML;
v = xmlDoc.getElementsByTagName("firstname")[0].firstChild.nodeValue;
var x = document.getElementById("rtext");
x.value = v;
}else{
alert ("Not able to retrieve description" + req.statusText);
}
}
}
</script>
</head>
<body>
<input type="text" id="rtext" size="19">
<input type="button" onclick="ser()" value="click">
</body>
</html>
server side:
<?php
header("Content-type: text/xml;charset=UTF-8");
header("Cache-Control: no-cache");echo '<?xml version="1.0" encoding="utf-8"?>';echo "<person>";
echo "<firstname>aaaaaaa</firstname>";
echo "<lastname>bbbbbbb</lastname>";
echo "<age>ccccccc</age>";
echo "<hometown>dddddddd</hometown>";
echo "<job>eeeeeee</job>";
echo "</person>";
?>
当我用Firebug 去看server 的response 时, server response 成以下的:
嚜�<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at D:\AppServ
\www\TestAJAX\serverSide.php:1) in <b>D:\AppServ\www\TestAJAX\serverSide.php</b> on line <b>2</b><br
/>
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at D:\AppServ
\www\TestAJAX\serverSide.php:1) in <b>D:\AppServ\www\TestAJAX\serverSide.php</b> on line <b>3</b><br
/>
<?xml version="1.0" encoding="utf-8"?><person><firstname>aaaaaaa</firstname><lastname>bbbbbbb</lastname
><age>ccccccc</age><hometown>dddddddd</hometown><job>eeeeeee</job></person>
看它的response,它似乎改不了个header,我想问有什么办法解决??
试试把请求的页面加个
error_reporting(0);
ob_start();
之后如果用了楼上的方法, 就会没有warning statement, 但仍然有
"嚜�" 的乱码存在, 以至ajax失败.
但如果用返ansi encode, 乱码同warning都会消失,ajax成功
之后如果用了楼上的方法, 就会没有warning statement, 但仍然有
"嚜�" 的乱码存在, 以至ajax失败.
但如果用返ansi encode, 乱码同warning都会消失,ajax成功