emlog评论ajax提交的两种方法
首页 >  Emlog  > 2017年01月20日阅(23215)评(18

推荐使用方法二,不需要修改源代码。通过正则过滤出系统的错误消息。

方法一:需要修改源代码

1.\include\lib\function.base.php中

"function show_404_page()"函数上方添加函数:

/**
 * 显示json信息
 *
 * @param string $msg 信息
 */
function myJson($msg) {
	echo $msg;
	exit;
}

2.\include\controller\comment_controller.php中

if($Comment_Model->isLogCanComment($blogId) === false) {
    //emMsg('评论失败:该文章已关闭评论');
    myJson(json_encode(array("status"=>"1")));
} elseif ($Comment_Model->isCommentExist($blogId, $name, $content) === true) {
    //emMsg('评论失败:已存在相同内容评论');
    myJson(json_encode(array("status"=>"2")));
} elseif (ROLE == ROLE_VISITOR && $Comment_Model->isCommentTooFast() === true) {
    //emMsg('评论失败:您提交评论的速度太快了,请稍后再发表评论');
    myJson(json_encode(array("status"=>"3")));
} elseif (empty($name)) {
    //emMsg('评论失败:请填写姓名');
    myJson(json_encode(array("status"=>"4")));
} elseif (strlen($name) > 20) {
    //emMsg('评论失败:姓名不符合规范');
    myJson(json_encode(array("status"=>"5")));
} elseif ($mail != '' && !checkMail($mail)) {
    //emMsg('评论失败:邮件地址不符合规范');
    myJson(json_encode(array("status"=>"6")));
} elseif (ISLOGIN == false && $Comment_Model->isNameAndMailValid($name, $mail) === false) {
    //emMsg('评论失败:禁止使用管理员昵称或邮箱评论');
    myJson(json_encode(array("status"=>"7")));
} elseif (!empty($url) && preg_match("/^(http|https)\:\/\/[^<>'\"]*$/", $url) == false) {
    //emMsg('评论失败:主页地址不符合规范','javascript:history.back(-1);');
    myJson(json_encode(array("status"=>"8")));
} elseif (empty($content)) {
    //emMsg('评论失败:请填写评论内容');
    myJson(json_encode(array("status"=>"9")));
} elseif (strlen($content) > 8000) {
    //emMsg('评论失败:内容不符合规范');
    myJson(json_encode(array("status"=>"10")));
} elseif (ROLE == ROLE_VISITOR && Option::get('comment_needchinese') == 'y' && !preg_match('/[\x{4e00}-\x{9fa5}]/iu', $content)) {
    //emMsg('评论失败:评论内容需包含中文');
    myJson(json_encode(array("status"=>"11")));
} elseif (ISLOGIN == false && Option::get('comment_code') == 'y' && session_start() && $imgcode != $_SESSION['code']) {
    //emMsg('评论失败:验证码错误');
    myJson(json_encode(array("status"=>"12")));
} else {
    $_SESSION['code'] = null;
    $Comment_Model->addComment($name, $content, $mail, $url, $imgcode, $blogId, $pid);
}

3.\include\model\comment_model.php中

QQ截图20170107233742.jpg

emDirect(Url::log($blogId).'#'.$cid);替换为:

myJson(json_encode(array("status"=>"13","url"=>Url::log($blogId))));

emMsg('评论发表成功,请等待管理员审核', Url::log($blogId));替换为:

myJson(json_encode(array("status"=>"14","url"=>Url::log($blogId))));

4.前端代码核心部分示例

var data={
	comname: $("#comname").val(),
	comment: $("#comment").val(),
	commail: $("#commail").val(),
	comurl: $("#comurl").val(),
	imgcode: $("input[name=imgcode]").val(),
	gid: $("#comment-gid").val(),
	pid: $("#comment-pid").val()
};
$.ajax({
	url: 'index.php?action=addcom',
	type: 'post',
	dataType: 'json',
	data: data,
	success: function(data){
		var tip = $("#commentTips");
		switch(data.status){
			case "1":
				tip.text("主人已关闭此篇文章的评论功能啦!");
				break;
			case "2":
				tip.text("已存在相同内容评论啦!");
				break;
			case "3":
				tip.text("您提交评论的速度太快了,请稍后再发表评论吧!");
				break;
			case "4":
				tip.text("请填写昵称哦!");
				break;
			case "5":
				tip.text("昵称不超过6个汉字或者20个字符哦!");
				break;
			case "6":
				tip.text("请填写正确的邮件地址哦!");
				break;
			case "7":
				tip.text("不能使用管理员昵称或邮箱评论哦!");
				break;
			case "8":
				tip.text("主页地址不符合规范哦!");
				break;
			case "9":
				tip.text("请填写评论内容哦!");
				break;
			case "10":
				tip.text("评论内容超出最大字数限制了哦!");
				break;
			case "11":
				tip.text("评论内容需包含中文哦!");
				break;
			case "12":
				tip.text("验证码不对哒!");
				break;
			case "13":
				alert("评论发表成功!");
				location.reload();
				break;
			case "14":
				alert("评论发表成功,请等待管理员审核吧!");
				location.reload();
				break;
		}
	}
});

5.代码托管于GitHub,地址:emlogCommentAjax

方法二:使用正则式(效果见本站评论系统)

直接上关键的js代码如下:

$("#comment_submit").click(function(event){
	event.preventDefault();
	doSubmitComment();
});
function doSubmitComment(){
	var comname = $.trim( $("#commentform input[name=comname]").val() ),
		commail = $.trim( $("#commentform input[name=commail]").val() ),
		comurl = $.trim( $("#commentform input[name=comurl]").val() ),
		comment = $.trim( $("#commentform textarea[name=comment]").val() ),
		imgcode = $.trim( $("#commentform input[name=imgcode]").val() ),
		tip = $("#commentTips"),
		btn = $("#comment_submit");
	if(($("#commentform input[name=comname]").length>0) && !comname){
		tip.html("请填写您的昵称!");
	}else if(($("#commentform input[name=commail]").length>0) && !commail){
		tip.html("请填写您的邮箱!");
	}else if(($("#commentform input[name=commail]").length>0) &&  !( /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(commail) ) ){
		tip.html("请填写正确的邮箱!");
	}else if(!comment){
		tip.html("请填写评论内容!");
	}else if(($("#commentform input[name=imgcode]").length>0) && !imgcode){
		tip.html("请填写验证码!");
	}else{
		$.ajax({
			url: $("#commentform").attr('action'),
			type: 'post',
			data: $("#commentform").serialize(),
			cache: false,
			beforeSend: function(){
				tip.html("提交中...");
				btn.attr("disabled",true);
			},
			success: function(res){
				btn.attr("disabled",false);
				var pattern = /<div class="main">[\r\n]+<p>(.*?)<\/p>/;
				if(pattern.test(res)) {
					res = res.match(pattern);
					tip.html(res[1]);
				}else{
					window.location.href = window.location.href.split("#")[0];
				}
			},error: function(){
				btn.attr("disabled",false);
			}
		});
	};
};
分享一个简单滴js分页函数
emlog小功能汇总

有朋自远方来...评论一下呗O(∩_∩)O哈哈~

QQ
昵称*
邮箱*
主页

评论(18)

11楼、大哥 [回复该留言]
2018-12-16 12:18
我怎么加了还是直接返回json数据啊。。。
e起飞young Vip博主大大 [回复该留言]
2018-12-19 10:21
@大哥:什么意思?
. [回复该留言]
2018-12-19 10:34
@e起飞young:就是点击直接跳转{"status":"1"},不会ajax刷新,怎么解
e起飞young Vip博主大大 [回复该留言]
2018-12-19 10:38
@.:那是因为你前端部分还没有改好呀,走的还是默认的表单提交方法,把原来的form表单提交阻止就行了
e起飞young Vip博主大大 [回复该留言]
2018-12-19 10:39
@.:建议采用本文的第二种方法,不用更改源代码
.
2018-12-19 11:06
@e起飞young:什么鬼d(ŐдŐ๑)。我都替换了你的git项目,还没阻止吗?怎么解
e起飞young Vip博主大大
2018-12-19 11:19
@.:还需要更改前端部分呀!!!找到你的模板文件夹里的module.php文件里的blog_comments_post函数,这里面还需要自己动手小改一下,比较简单我就没写了。不是建议你使用文章中的第二种方法了嘛,改动较小!
.
2018-12-19 11:42
@e起飞young:简单个鬼哟,你不说我怎么知道,我只知道搬,
10楼、麦芽糖 [回复该留言]
2018-10-16 15:42
带我去二多无
9楼、自由飞翔/惊讶 [回复该留言]
2018-09-08 07:57
看看
8楼、天津网站建设 [回复该留言]
2018-09-06 21:33
文章写得非常棒,太感谢博主了,会默默关注的
7楼、路七博客 [回复该留言]
2018-08-20 08:14
我来试试
6楼、pony [回复该留言]
2018-08-13 17:22
测试啊啊啊啊啊啊啊啊
5楼、杨小杰博客 [回复该留言]
2018-06-20 17:14
试试
4楼、随缘 [回复该留言]
2017-09-03 11:04
好东西 支持一下 哈哈
3楼、烈火君 [回复该留言]
2017-03-04 15:34
来支持一下博主
2楼、Scarecrowヽ [回复该留言]
2017-02-11 21:30
来看看。