邪罗刹的菠萝阁


> 这段代码是一个通用的 AJAX 评论提交代码,主要功能在通用和无刷新,但是加速发表的效果不是很好。
> 理论上来说,如果你懂一点 JQUERY,那么只要稍稍做一下修改,几乎所有不同的程序都可以使用的。

一. AJAX发表评论的各种程序通用版代码:

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/jq.js"></script>
<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/ajax.js"></script>
//首先下载一个官方的 JQ 代码库放到主题文件夹中,并把文件名修改为 jq.js ~
//可以过这个地址下载 - http://code.jquery.com/jquery-1.4.2.min.js ~

<?php wp_head(); ?>
//在 Header.php 中这行代码上方插入上面的代码,载入 JQ 库与支持 AJAX 评论的 JS 文件 ~
<?php comments_template(); ?>
//在 page.php single.php 两个文件里,找到上面的代码,修改成下面这样 ~

<div id="reloadComment"><!--reloadComment--><?php comments_template(); ?><!--reloadCommentEnd--></div>
//围绕着评论代码添加一个DIV,并用 Html 的注释方法来添加两个标记 ~
#loading{background:#F2F2F2;border:1px solid #ccc;margin:10px auto;display:none; line-height:40px; padding-left:10px;}
//然后增加一个 loading 的载入提示框,在提交评论的过程中显示 ~

#loading{background:#F2F2F2 url('/apps/myimg/tmp/loading.gif') no-repeat 15px 50%;padding-left:40px;border:1px solid #ccc;line-height:40px;margin:10px auto;}
//当然也可以增加一个 gif 载入图片,把这段代码里面的图片地址修改一下即可 ~
<div id="respond">    <div id="loading"></div>
	<h2><?php comment_form_title( '发表评论', '回复 %s' ); ?></h2>
	<div class="cancel-comment-reply">
		<small><?php cancel_comment_reply_link(); ?></small>
	</div>
//在 respond 的 div 中增加 loading 提示框的 div ~
//注意!小邪提供的所有代码最好去除注释后再用,有时候可能注释位置会影响到代码执行效果 ~
function reloadComments(data){
	var reloadStar = data.indexOf('<!--reloadComment-->');
	var reloadEnd = data.indexOf('<!--reloadCommentEnd-->');
	//通过刚才添加的标记切割新的源代码
	if(reloadStar>=0){
		jQuery("#reloadComment").html(data.substring(reloadStar,reloadEnd));
		bind();
	}
	else
		jQuery("#loading").fadeOut('fast').html(data).css("background","#FFACAC").fadeIn('slow');
		//显示错误提示
}
function realodCommentsError(data){
	jQuery("#loading").fadeOut('fast').text(data).css("background","#FFACAC").fadeIn('slow');
	//显示错误提示
}
function bind(){
	jQuery("#submit").click(function(){
		jQuery("#loading").fadeIn('slow').text("Sending .. Please wait a moment ....").css("background","#F2F2F2 url('/apps/myimg/tmp/loading.gif') no-repeat 15px 50%");
		jQuery.ajax({
			type:'POST',
			dataType:'text',
			url:jQuery("#commentform").attr("action"), //获取提交目的地址
			data:jQuery("#commentform").serialize(), //处理数据
			success:function(data){reloadComments(data);},
			error:function(dataxml){
				var eStart=dataxml.responseText.indexOf('<p>');
				var eend = dataxml.responseText.indexOf('</p>');
				realodCommentsError(dataxml.responseText.substring(eStart+3,eend));}
			});
		return false;
	});
}
jQuery(document).ready(function(){
	bind();
});
//这些就是 ajax.js 里面的内容了,如果不需要 gif 载入提示图片,去除下面的代码
//url('/apps/myimg/tmp/loading.gif') no-repeat 15px 50%

二. 关于这段代码:

> 理论上来说,只要稍作修改,基本上各种程序都可以用。因为这个原理只是防止刷新,并不加快速度。
> 其实只是把刷新的步骤通过 AJAX 搞定,然后从刷新之后的代码里,提取出关于评论的那部分源代码。
> 然后把原来页面关于评论的这部分源代码用新代码替换掉,就达成了 AJAX 无刷新提交评论的效果。

> 并不像小邪现在在用的 WILLIN 写的代码一样,还需要在 comments-ajax.php 里面模仿模板评论样式。
> 所以理论上来说,如果你懂一点 JQUERY,那么只要稍稍做一下修改,几乎各种程序都可以使用的。

> 因为上面的这些代码是从一个 5d6d 论坛群的其中某个子论坛上面的转载帖子的附件里面提取出来的。
> 当时楼主转载的时候木有写任何的原作者,所以暂时没有办法知道原始的出处。

三. 尾记:

> 最近有盆友灰常无聊了呐,o(* ̄▽ ̄*)ゞ,开启 “评论者必须曾有一条评论被批准”,表示毫无鸭梨。

Leave a comment
182 Comments.
  1. 柳城 Google Chrome Windows 坐沙发!#1

    :biggrin: :biggrin:

    @
  2. 小闇 Google Chrome Windows 坐板凳!#2

    板凳……

    @
  3. 有点技术含量,不怎么看得懂

    @
  4. 林木木 Google Chrome Windows 天花板!#4

    代码很精简~~

    @
  5. mice Internet Explorer Windows 下水道!#5

    :wink: 我表示那盆友 是我那边的...他蛋疼啊 :exclaim:
    我那边没弄这个限制..然后一堆的评论 :mad:

    @
  6. mice Internet Explorer Windows 地心!#6

    :well: 你是不是被我打扰怕了...都不上Q了.. :sad:

    @
  7. 先发一条不语。。

    @
  8. 我囧。。。你的也还是提交到comments-ajax.php。。。直接将ajax数据提交给wp-comments-posts.php,会只返回格式化后的新评论吗?
    我没试过,不过感觉会返回整个新页面,要取得新评论,估计得过滤一下,但是这样返回的数据量其实就蛮大了。所以还不如直接用个comment-ajax.php只输出新评论了。。。
    我目前还是使用comments-ajax.php这个,JS是自己重写的原生JavaScript版。

    @
    • @QiQiBoY , 直接提交过去不会返回格式化的评论的 ~
      只是等于跳过了刷新步骤,直接把提交之后显示的页面里 ~
      的源代码,评论部分代码,根据html注释作为的标记切割下来 ~
      再替换原先的代码 ~ :biggrin:

      @
    • @QiQiBoY , 嘿嘿,所以及时醒悟鸟 ~ --\(˙<>˙)/-- ~
      现在换成comments-ajax.php咯 ~ o(* ̄▽ ̄*)ゞ ~

      @
  9. 这机器人很诚实。。。

    @
  10. 不懂jq,来捧个场,willin的那个ajax很受用啊

    @
  11. 现在很流行ajax评论。

    @
  12. haha.. 我来试下你的 AJAX 评论 :biggrin:

    @
  13. 小邪 Unknow Browser Unknow Os #13

    来小邪这里来测试下评论的发表,本消息来自客户端机器人发送! 哈哈……娱乐娱乐……

    @
  14. 我只是来试下... :biggrin:

    @
  15. 我需要这个,来研究研究~

    @
  16. 最后那张图的效果我上次做活动也撞到过 :exclaim:

    @
  17. 啊哦!最后那张图很强大哈!呵呵

    @
  18. 现在的主题没以前的好看咯。 :wink:

    @
    • @Kada , 嘎?!你还是觉得原先的主题好看?
      不过原先的主题评论一多,就要拉半天滚动条滴 ~
      折腾得好多人蛋疼 ~ :idea:

      @
  19. 短小精悍 非常有力

    @
  20. 厉害!
    博主的这个代码高亮是如何实现的呢?

    @
  21. 值得支持

    @
  22. 这个玩玩,不太懂什么ajax,唉

    @
    • @zwwooooo , 呵呵,这个通用方法只是防刷新 ~
      速度很慢的,以前说增加了ajax就是用了这个 ~
      不过后来换了专门的 comments-ajax.php ~

      @
  23. 感觉这个自己做了个不返回新评论包的,玩儿,不知道会不会出错

    @
  24. 我的博客还没有弄ajax评论,暂时还没时间折腾博客。。 :exclaim: :exclaim:

    @
  25. :biggrin: :biggrin: :biggrin: :biggrin:

    @
  26. 好深奧 :biggrin:

    @
  27. 昨天才用上ajax,willin大濕的速度比較快

    @
    • @Ygs , 恩恩,能有专门的comments-ajax.php来返回数据最好了 ~
      那样最快,如果没办法或者不会做这个的话 ~
      用小邪文章里面的代码比较好,速度慢点,不过兼容性很高 ·

      @
  28. 结尾处哪个怂人干的啊!我最怕就是垃圾评论了,拉出去,弹jj。

    @
  29. 为了我你写了这篇文章,赶鸡不尽吖~

    @
  30. 我也来测试下

    @
  31. 路过,看不懂

    @
  32. 测试一下~

    @
  33. 不如直接用.load()啊?可以直接只要回复部分的div,反正都是返回的是页面,干脆刷新全部评论算了

    @
  34. 这个干嘛的 :biggrin:

    @
  35. 头像太麻烦了,虽然有jq的函数,但函数又一大串……放弃头像,除非有其他方法,如调用php函数……

    @
  36. 等我自己会写ajax了就把你给ajax了 :mrgreen: :mrgreen: :mrgreen: :mrgreen:

    @
  37. :rolleyes: 好复杂,学习不了,只能赞一个

    @
  38. 有待研究啊,至今没有吃透Ajax :mad:

    @
  39. 我也表示那朋友是我那边的,那天我被弄了60多条 :exclaim:

    @
  40. 我还是乖乖的用Willan的吧。。。 :exclaim: 看不懂啊。弄个Gravatar缓存都弄了半天。。。

    @
    • @FORECE , 能用willin的就用willin的喔 ~
      小邪这个是兼容性强 ~ 不过并没有willin那个那么适合wp的 ~

      @
  41. 恩,取走了,去试试。

    @
  42. 这么好,我来看看

    @
  43. 对代码有点小白呢,一时还消化不了哦,不过这个很有用啊

    @
  44. 良心发现 Google Chrome Windows #48

    参考一下,随便测试 :mrgreen:

    @
  45. 呵呵,这个教程比较实用的,谢谢

    @
  46. :mrgreen: 我是手工通过两条即可无限评论了
    最近垃圾评论甚嚣尘上

    @
  47. 啊哦!很荣幸,你被盯上了!呵呵

    @
  48. 本人对代码不是懂,该回去好好补补了

    @
  49. 文章开头交代的不是很清楚啊

    @
  50. 不错 改天也整整我那个博客

    @
  51. 奇怪,我用chrome看你上面代码都是重叠的……

    @
  52. 小邪这些天咋也没更新啊~我还没抢到过沙发呢~

    @
    • @小松 , 刚刚到荷兰,搬家和一大堆事情,折腾死小邪鸟 ~
      GMT+1时间的晚上应该能更新一篇呢 ~

      @
  53. :evil: 好长的代码~~~好多代码~~~ :exclaim: 小邪,不佩服不行啊!

    @
  54. :exclaim: 看的有点头晕了

    @
  55. 小邪的主题越来越没有以前好看了。

    @
  56. 我表示 一点不懂 :cry:

    @
  57. :wink: 代码太多看不过来啊

    @
  58. :mad: :mad: :mad: 很厉害哦!

    @
  59. 我来试试~ :razz:

    @
  60. 再试试 :redface:

    @
  61. 要是能实现提交留言后还能修改就好了~~ :biggrin:

    @
    • @阿达 , 呵呵,Willin 是有提供这个功能的,不过小邪去掉了 ~
      为了精简一下代码 ~ :redface: :redface:

      @
  62. spammer好 :exclaim:

    @
  63. 看到上面那个框,很想打字。。。。。结果发现是图片

    @
  64. 小邪童鞋,能求你的comments-ajax.php和js吗?我照着willin的安装提示,评论模式my-theme也套进去,却出错了,~~~~大部分嵌套都正常,就是评论提交的时候出现错误,无法提交,然后闪一下404界面~~~悲剧啊~~~麻烦帮帮忙~非常感谢

    @
  65. Martin Google Chrome Windows #69

    testing測試測試 :evil: :evil: :evil:

    @
  66. 试试,效果不错收藏起来,慢慢研究 :lol:

    @
  67. :shock: 此文不火,天理难容

    @
    • @Willin Wang , 嘻嘻,感谢Willin大师的支持,不过这个可不能课您老那个比,这个虽然通用性超强,但是速度很慢的。╮(╯▽╰)╭。

      @

Leave a Reply


[ Ctrl + Enter ]