开发笔记|PHP+AJAX前后端交互调试的关键注意事项
·
由于ajax调试起来非常麻烦,所以我们应该把前后端分开测试,代码如下:
后端代码:(comentbyajax.php)
<?php
require_once './dbcon.php';
set_time_limit(0);
//echo json_encode(array('content'=>'aaaaaa'));exit; ①
$rec = $_COOKIE['username'];
$sql = "select * from msg where rec='$rec' and isread=0 limit 1";//防止取到多条数据没能及时显示
//echo json_encode(array('content'=>$sql));exit;②
while (true){
$rs = mysql_query($sql, $conn);
$row = mysql_fetch_assoc($rs, $conn); //注意:此处特意写错,正确的为mysql_fetch_assoc($rs)③
if(!empty($row)){
echo json_encode($row);
break;
}
sleep(1);
}
?>
前端代码:(custom.php)
<?php
if(empty($_COOKIE['username']))
setcookie('username', 'user'.rand(10000,99999));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>在线用户端</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script type='text/javascript'>
$(function(){//长轮询(注:该函数在页面加载完成后自动执行)
var setting = {
url:'comentbyajax.php',
dataType:'json',
type:'post',
success:function(res){④
var cont = '<p>客服对你说:<br/>'+res.content+'</p><br/>';
$('#msgzone').append(cont);
}
};
$.ajax(setting);
});
function xunwen(){
var cont = $('textarea:first').val();
$.post('sendmsg.php',{rec:'admin',content:cont},function(res){
if(res == 'ok'){
var wen = '<p>你对客服说:<br/>'+cont+'</p>';
$('#msgzone').append(wen);
}
});
}
</script>
<style type="text/css">
#msgzone{
border: 1px solid gray;
width:400px;
height:200px;
overflow:scroll;
}
</style>
</head>
<body>
<h2>coment反向ajax技术---在线客服系统---之用户端</h2>
<h3>原理:ajax+长连接+轮询(长轮询),获取实时内容,并更新到父页面</h3>
<div id='msgzone'></div><!-- 聊天信息区域 -->
<textarea></textarea>
<input type='button' value='咨问' onclick='xunwen();'/>
</body>
</html>
问题描述:执行custom.php文件时出现comentbyajax.php不能正确返回信息给custom.php。
排查:此时排查的过程我们要分步骤查找(即分别在comentbyajax.php和custom.php查找)
首先在comentbyajax.php文件中添加echo json_encode(array('content'=>'aaaaaa'));exit;调试语句保存(如①处所示),然后执行custom.php文件,看④处是否能正确输出信息,如果能则表明custom.php写法正确,接下来重点排查comentbyajax.php,怀疑是否在拼接sql字符串中出错,然后再添加echo json_encode(array('content'=>$sql));exit;调试语句保存(如②处所示),然后拷贝④处得到的信息并粘贴到mysql命令窗口执行,如图所示:

发现语句正确执行并返回信息,干脆狠下心来单独执行comentbyajax.php文件,所以将代码修改为:
<?php
require_once './dbcon.php';
set_time_limit(0);
//echo json_encode(array('content'=>'aaaaaa'));exit;
$rec = $_COOKIE['username'];
$sql = "select * from msg where rec='$rec' and isread=0 limit 1";//防止取到多条数据没能及时显示
//echo json_encode(array('content'=>$sql));exit;
//while (true){
$rs = mysql_query($sql, $conn);
$row = mysql_fetch_assoc($rs, $conn);
if(!empty($row)){
echo json_encode($row);
//break;
}
sleep(1);
//}
?>
再去执行它,发现输出错误信息:

此时很明显mysql_fetch_assoc()写错了。
解决:由于comentbyajax.php文件中的③处错将mysql_fetch_assoc($rs)写成了mysql_fetch_assoc($rs, $conn),该语句造成了php执行时出错的同时也没有返回任何信息给④处。
更多推荐
所有评论(0)