邪罗刹的菠萝阁


> 请注意_( ̄0 ̄)_喔,这个程序只为演示 AJAX,并非正式程序,所以木有做任何严格的重复投票防护。
> 此文主要介绍如何实现多项投票的方法,以及灰常简单的 jQuery 局部刷新的应用方法,o( ∩ω∩ )m。

一. jQuery多项投票演示:

> 这次小邪木有做什么防护,只要刷新页面就可以再次投票,因为此程序的目的只是演示 jQuery 效果。
> 所以,嘎嘎嘎,如果你想要抒发自己强烈的思想感情,然后情不自禁地刷新页面鸟,就随便投票吧。

> 强力的纯洁的无知的传送门 - http://www.evlos.org/apps/demo/ajax_005

二. jQuery多项投票重点代码注释:

//这里小邪只是把和原先那次有明显区别,并且作用较大的代码贴出来作一些说明
//如果有更多疑问,请查看原先的文章,如果还觉得迷糊,请留言询问即可 O(∩_∩)O

function getdata() {
	global $dbfile;
	$data = file_get_contents($dbfile);
	$array = explode('|',$data); //把数据以 | 为分隔,分割到数组
	return $array;
}
//在 index.php 使用这个函数的来只是读取投票数据 ”0|0|0|0|0|0|0|0|0“

function showlist() {
	global $votenum,$votes;
	$data = getdata();
	function is_odd($num){ //判断偶数的较另类的方法
		return (is_numeric($num)&($num&1));
	}
	//额,实际上后来小邪并木有使用判断结果,因为觉得没必要以颜色分行
	for ($i=0;$i<$votenum;$i++) {
		if (is_odd($i)) { $trclass = 'odd'; } else { $trclass = 'even'; }
		echo '<tr id="vote_'.($i+1).'" class="'.$trclass.'"><td class="gray">#'.($i+1).'</td><td>'.$votes[$i].'</td><td class="gray">已有 <span class="count vote_'.($i+1).'">'.$data[$i].'</span> 票</td><td class="gray warn">已投票</td><td class="gray button">[投票]</td></tr>'."\n";
		//这里给每一行的数据附一个 id,内容为 ”vote_投票编号“
		//我们靠 class="count" 来找到投票数,靠 warn 和 button 来变换投票前后显示文字
	}
}
//在 index.php 使用这个函数来输出投票列表

$votenum = count($votes);
//在 config.php 里面的这个语句用来统计数组包含的数量

$ivote = $_POST['ivote'];
for ($i=1;$i<=$votenum;$i++) {
	if ($ivote=='vote_'.$i) {
		$res = $i;
	}
}
//在 vote.php 使用这个循环来判断用户所投的票,Post来的数据为 vote_1 vote_2 等
$(document).ready(function(){
	$("#vote .button").click( //先找到按键元素,即 ”投票“ 文字处
		function() {
			var votesorder = $(this).parent().attr("id"); //取父元素的 id 来判断当前所投何票
			var count=eval($("#vote ."+votesorder).text())+1; //然后对其票数加一
			$("#vote ."+votesorder).css("color","green").text(count); //显示加一后的票数并变色
			$("#vote .button").css("display","none"); //隐藏 ”投票"
			$("#vote .warn").css("display","inline"); //显示 “已投票”
			$.ajax({
				type:'POST',
				dataType:'text',
				url:'vote.php',
				data:'ivote='+votesorder
			});
			//Post发送数据,类型 text,送给 vote.php,内容为父元素的 id
			/* $.cookie('vote_s81jaj881jja', 'yes', { expires: 3 }); */
			//不打算做 cookie 防护了
		}
	);
});

三. 局部刷新预习:

$(document).ready(function(){
	$("#box .button").click(
		function() {
			data=$.ajax({url:"time.php",async:false});
			/* async表示禁止异步请求,因为我们接下来就要使用返回的数据 */
			$("#box .target").html(data.responseText);
		}
	);
});

> 简单的当前秒数局部刷新演示地址 - http://www.evlos.org/apps/demo/ajax_006

四. 演示程序下载:

> 首先是前面的 jQuery 多项投票演示程序的下载地址,后面则是 jQuery 预习演示程序的下载地址,哈。

> http://code.google.com/p/evlosbox/downloads/detail?name=jquery-more-votes-example-v1.zip
> http://code.google.com/p/evlosbox/downloads/detail?name=jq-areafresh-easy-v1.zip

五. 附言:

> 虽然小邪已经在代码中注释说这个程序木有做严格防护,但是仍然很感谢报告 BUG 的盆友,嘿嘿 ;D。

Leave a comment
72 Comments.
  1. 寂寞流星 Internet Explorer Windows 坐沙发!#1

    不错,写得很好。学习了。

    @
  2. yetone Google Chrome Windows 坐板凳!#2

    顶一下的功能能出就好了 :biggrin:

    @
  3. QiQiBoY Mozilla Firefox Windows 躺地板!#3

    越来越高级了。。。 :smile:

    @
  4. winy Google Chrome Windows 天花板!#4

    4#、5#我每个刷了5票 :mrgreen:

    @
  5. fatkun Google Chrome Windows 下水道!#5

    围观一下好了~~顺便学下php

    @
  6. 昵称 Mozilla Firefox Windows 地心!#6

    怎么都这么高端!?

    @
  7. 邪应该被脱光丢街上 o(>.<)o

    @
  8. 小邪是坏淫 ~(>_<)~ :lol: 刷新再点..点到25了..

    @
  9. 点到我手酸了。。。 :lol:

    @
  10. 速度简直是太快了~嫉妒 :wink:

    @
  11. 效果不错……嗯,脱光了丢街上吧

    @
  12. 又是JQ阿。不懂。~~ :exclaim:

    @
  13. :rolleyes: 小邪的教程真是生动有趣~~~ :arrow:

    @
  14. 一直感觉AJAX是很有用的东西,但个人程序能力不行,不能有所认识!但还是知道怎么回事了!!

    @
  15. 其实还真不懂,每次都只能过来打酱油。。。。

    @
  16. 我是来投票的。不过话说回来这个功能还真不错

    @
  17. 还有很大的修改空间,我教教你吧

    @
  18. 我把第五项刷了几票,哈哈

    @
  19. 没有预览啊

    @
  20. #4。。支持#4。据说你回国了?

    @
  21. 嗯 自己在另一个站上实现了一下 用的jquery的ajax

    @
  22. 我投4,5,6

    @
  23. 小邪,你以高票通过,拉街上去脱光。

    @
  24. :wink: 嘿嘿 我来踩踩 我本本让朋友抢走了 我没得用了 5555 对了 你的留言板咋不见鸟?

    @
  25. 呵呵 在国外的啊 你 呵呵 过来看看新朋友 :rolleyes:

    @
  26. 过来看看你 帮你踩踩

    @
  27. 谁能用的上?

    @
  28. 以后多学点这方面的东西了,换个主题都弄不好,╮(╯▽╰)╭

    @
  29. 这个用的人不多吧

    @
  30. 偷偷告诉你,我只刷新了几次,都是投的第一个,哈哈~

    @
  31. 呃。。不太懂

    @
  32. :idea: 我直接从170刷到200不用我说你也知道是哪个吧! :idea:

    @
  33. 我切了你20多次JJ……

    @
  34. 錯過了投票OTL"
    我投4,5好了 :mrgreen: (喂

    @
  35. 小邪,您真狠啊。

    @
  36. 投6不解释~~ :razz:

    @

Leave a Reply


[ Ctrl + Enter ]