开发笔记|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.phpcustom.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命令窗口执行,如图所示:

图片1

发现语句正确执行并返回信息,干脆狠下心来单独执行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);
//}
?>

 

再去执行它,发现输出错误信息:

图片2

此时很明显mysql_fetch_assoc()写错了。

解决:由于comentbyajax.php文件中的处错将mysql_fetch_assoc($rs)写成了mysql_fetch_assoc($rs, $conn),该语句造成了php执行时出错的同时也没有返回任何信息给

 

posted @ 2025-11-07 15:50  翰佰尔生物  阅读(0)  评论(0)    收藏  举报