<legend id="0xz0y"><i id="0xz0y"></i></legend>

<legend id="0xz0y"></legend>

    <optgroup id="0xz0y"></optgroup>
    <optgroup id="0xz0y"></optgroup>
    杨小杰博客(Youngxj)提供免费教程下载和网站搭建技术教程,主要分享和发布网站源码,致力创造一个高质量网络资源教程的分享平台

    emlog评论ajax提交的两种方法

    Young小杰2018-6-20 22:16网站搭建(11)1808查询中……小标签: 网站搭建教程 emlog

    方法一:需要修改源代码

     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中

    fcef1484922630.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,地址:CommentAjax


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

    直接上关键的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,
                            async: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);
    			}
    		});
    	};
    };
    小杰是参考第二种办法进行的ajax评论提交修改的,其中也遇到很多问题,下面罗列一下


    1、myJson函数返回的是json格式的代码,但是ajax还是识别不了

        答:因为json需要header头设置为json编码,所以myJson函数还需要加一个

    header('Content-type: application/json');
        才能被ajax识别


    2、<input type="submit">按钮提交form表单会跳转的问题

        答:这个我也是脑子烧了,最后只需要把<input type="submit">按钮换成<button type="button"></button按钮即可。

    3、关于安装反评论等插件,返回格式不同

        答:这类插件使用的也是emMsg函数返回提示信息,所以只需要换成myJson函数即可。

    4、关于重复提交问题

        答:因为原版js没有加同步操作,所以只需要在ajax操作中加入async:false同步操作即可,本文已加

    上面就是小杰在替换ajax评论提交时遇到的一些复杂问题。


    发表评论:

    发表评论:

  • avatar
    陌涛 Lv 1

    emmmmmm学习了~

  • 小航 Lv 1

    查看图片请问加了怎么还是直接显示json数据

    • Young小杰 站长

      回复了小航:显然你没把form拦截成功。

  • 小航 Lv 1

    git失效了。。。第二种怎么加?header('Content-type: application/json');

    • Young小杰 站长

      回复了小航:https://github.com/jianggle/emlogCommentAjax

  • avatar
    Recycle¨ Lv 1

    打卡成功,现在时间:19点18分记得每天坚持打卡哦!

  • avatar
    会飞的鱼 Lv 2

    ajax评论这个似乎写的有bug   会重复提交  不过需要刷新后才正常 不知道是不是我写法有误

    • Young小杰 站长

      回复了会飞的鱼:如果你是用文章中代码确实存在这问题,我是自己改动过,我有空把这个问题贴出来解决一下

  • 傻子哦 Lv 1

    拿了代码就跑,谁抓得到

  • avatar
    张大官人 Lv 1

    不要以为自己坚持不来,你一定会坚持熬夜玩手机。

  • 试试哦~

  • 手机扫描二维码
    阅读体验更佳
    管家婆马报玄机彩图67期 景宁| 乐都县| 德兴市| 吉林市| 集安市| 鄂托克前旗| 连江县| 平阳县| 轮台县| 东台市| 炎陵县| 城步| 略阳县| 酉阳| 九台市| 达尔| 常德市| 汤原县| 乡城县| 新蔡县| 泰宁县| 沐川县| 广德县| 乐业县| 洛浦县| 米泉市| http://srlgfe.co 海丰县| 馆陶县| 高碑店市| 新丰县| 湘阴县| 个旧市| 永寿县| 大理市| 亳州市| 广德县| 南开区| 佛教| 绥宁县| 呼玛县| 兴和县| 全州县| 五台县| 五寨县| 咸宁市| 广河县| 黄骅市| 偃师市| 托克逊县| 翁源县| 林芝县| 富宁县| 中江县| 开封县| 开封市| http://mbvgx7.com 虎林市| 密山市| 抚宁县| 新源县| 南岸区| 吉林省| 临夏县| 江源县| 曲麻莱县| 临潭县| 太仆寺旗| 高阳县| 长汀县| 冕宁县| 教育| 衢州市| 黄陵县| 东宁县| 新余市| 建宁县| 海阳市| 温州市| 溆浦县| 随州市| 山阴县| 砀山县| 长岭县| 阿图什市| 隆昌县| 枣庄市| 临泽县| 东乡县| 紫金县| 防城港市| http://www.oiq5114.tw 鄂温| 大荔县| 乌兰浩特市| 扶余县| 无锡市| 汪清县| 饶阳县| 剑河县| 苗栗市| 宁城县| 永善县| 同江市| 金秀| 五华县| 高邮市| 东兴市| 永和县| 额尔古纳市| 西峡县| 通州区| 大冶市| 申扎县| 临漳县| 原平市| 克拉玛依市| 保靖县| 新昌县| 平舆县| 阿拉善右旗| http://www.iennkz.com.cn 江西省| 习水县| 陕西省| 东平县| 军事| 桃园市| 邵阳县| 长岭县| 红桥区| 霞浦县| 昌乐县| 大埔区| 交口县| 海盐县| 梧州市| 大冶市| 颍上县| 神池县| 乌兰察布市| 凤凰县| 德兴市| 莱芜市| 紫云| 东兴市| 莱阳市| 和政县| 城步| 渝中区| 灌云县| http://sle2177.co 汝城县| 巢湖市| 保亭| 平凉市| 乌兰浩特市| 怀仁县| 如东县| 杨浦区| 闵行区| 黑河市| 深泽县| 涟源市| 长岛县| 陈巴尔虎旗| 宣化县| 武清区| 惠水县| 安溪县| 深州市| 宝丰县| 阜新市| 丁青县| 资溪县| 汉源县| 长春市| 蒙山县| 丁青县| 商都县| http://www.ele972.cn 东海县| 榆树市| 抚远县| 封丘县| 宜昌市| 丰都县| 望城县| 泉州市| 浮梁县| 宝应县| 西乌珠穆沁旗| 潍坊市| 怀来县| 博罗县| 鞍山市| 新余市| 巍山|