零点博客复盘:用JQuery实现EMLOG评论AJAX交互与底层防注入实战
最近在零点博客折腾了一波 EMLOG 插件的优化,核心痛点就是原生的表单提交会导致页面刷新,用户体验太差。作为一名资深的 C# / PHP 混合开发老兵,我决定用 JQuery 来重构交互层,顺便把后端的 SQL 注入防护补上。这次分享不是理论课,全是 HTML/CSS/JS 与 MySQL 结合的落地干货。
一、 为什么选择 JQuery?
很多人说 JQuery 旧了,但在兼容性和简便性上,处理 AJAX 请求和 DOM 操作依然是神器。我们要做的就是把评论框变成异步提交,利用 JSON 数据格式在前后端之间高效传输。
二、 前端交互:封装 $.ajax
别再手写 `XMLHttpRequest` 了,直接上 JQuery 封装好的方法。我们需要拦截表单提交事件,获取用户输入的数据。
// 获取评论表单
var form = $('#comment-form');
form.on('submit', function(e) {
e.preventDefault(); // 阻止默认跳转
var postData = {
'content': $('#content').val(),
'blogid': 1, // 假设文章ID
'token': 'csrf_token' // 简单的防CSRF模拟
};
// 使用 JQuery 发起 POST 请求
$.ajax({
type: 'POST',
url: '/action/comment',
data: postData,
dataType: 'json', // 期望返回 JSON
beforeSend: function() {
// 添加 loading 状态
$('#msg').html('正在提交中...');
},
success: function(res) {
// 处理后端返回的 JSON 数据
if (res.status === 200) {
$('#msg').html('评论成功!刷新页面查看。');
form[0].reset();
} else {
$('#msg').html('错误:' + res.msg + '');
}
},
error: function(xhr) {
// 处理网络或 404
console.error(xhr.responseText);
}
});
});
三、 后端核心:C#/PHP 接口开发与 SQL 预处理
前端做好了,后端得接得住。这里必须强调 SQL 注入防护。不要直接拼接 SQL 语句!无论是用 PHP PDO 还是 C# EntityFramework,都要用预处理。
假设我们的接口接收 JSON 数据:
// 伪代码:PHP 接收 AJAX 数据
$content = $_POST['content'];
$blogId = intval($_POST['blogid']); // 强制转数字
// SQL 预处理语句
$stmt = $pdo->prepare("INSERT INTO `emlog_comment` (`content`, `gid`, `date`) VALUES (:content, :gid, NOW())");
// 绑定参数,彻底杜绝注入
$stmt->execute([
':content' => $content,
':gid' => $blogId
]);
// 返回 JSON 格式结果
echo json_encode(['status' => 200, 'msg' => 'success']);
如果是 C# 写的接口(WebAPI),逻辑是一样的:
var command = context.Database.GetDbConnection().CreateCommand();
command.CommandText = "INSERT INTO comments (Content, BlogId) VALUES (@content, @blogid)";
command.Parameters.Add(new SqlParameter("@content", content));
command.Parameters.Add(new SqlParameter("@blogid", blogId));
command.ExecuteNonQuery();
四、 数据解析与避坑指南
在这个环节,很多新手会掉进坑里。因为 JQuery 默认发送的是 Form Data,而我们的接口可能期待 JSON 格式。
- 坑点 1: 如果后端是 EMLOG 原生 PHP,建议直接通过 `$_POST` 获取,或者修改 PHP 的 `input_type = JSON`。
- 坑点 2: 数据库连接字符集一定要设为 UTF8,否则中文会乱码,这是 MySQL 里的常见问题。
- 坑点 3: 正则表达式虽然强大,但在处理评论内容时要小心 XSS,比如 `



评论一下吧
取消回复