4 回答

TA貢獻(xiàn)178條經(jīng)驗(yàn) 獲得超70個(gè)贊
<img?src="###"?class="img">
//引入jquery.js //引入jquery.cookie.js //點(diǎn)擊數(shù)存進(jìn)本地緩存 $(".img").click(function?()?{ ????var?img_click_num?=?$.cookie("img_click_num")?||?0; ????$.cookie("img_click_num",Number(img_click_num)+1,{expires:30}); }) //ajax提交點(diǎn)擊數(shù) var?setImgClickNum?=?function(num)?{ ????$.ajax({ ????????url?:?setImgClickNum.php, ????????type?:?'POST', ????????data?:?{num?:?num}, ????????dataType?:?'JSON', ????????success?:?function(msg)?{ ????????????if(msg.status?==?1)?{ ????????????????var?img_click_num?=?$.cookie("img_click_num"); ????????????????$.cookie("img_click_num",img_click_num?-?num?,{expires:30}); ????????????} ????????} ????}) } //定時(shí)提交 //一分鐘檢查一次 setInterval(function(){ ?????var?img_click_num?=?$.cookie("img_click_num")?||?0; ?????img_click_num?>?0?&&?setImgClickNum(); },1000*60)
//原生寫(xiě)法 //PHP接口 //setImgClickNum.php $num?=?$_POST['num']; !is_int($num)?&&?exit(json_encode(array('status'=>-1,'info'=>'參數(shù)不正確'))); $sql?=?"insert?into?tableName?(`clicknums`)?values?($num)"; $res?=?mysql_query($sql,$dbname); $res???exit(json_encode(array('status'=>1,'info'=>'提交成功')))?:? ???????exit(json_encode(array('status'=>0,'info'=>'提交失敗')));
//代碼就這么多,專門(mén)給你寫(xiě)的,你有禮貌,我就愿意閑著給你寫(xiě)下,你謝謝都沒(méi)有,再閑一個(gè)字都不想給你動(dòng)。
//這地方用了異步定時(shí)每分鐘提交方式,優(yōu)點(diǎn)在于不用每點(diǎn)擊一次就提交一次,增大服務(wù)器壓力,當(dāng)然你可以把定時(shí)器時(shí)間設(shè)更長(zhǎng)點(diǎn)。
//js使用了本地緩存到cookie,沒(méi)有使用全局變量,優(yōu)點(diǎn)在于防止全局污染,其次防止多次點(diǎn)擊后,立即刷新頁(yè)面或者關(guān)閉跳轉(zhuǎn)頁(yè)面導(dǎo)致來(lái)不及提交。
//js部分的這一句$.cookie("img_click_num",img_click_num - num ,{expires:30});很關(guān)鍵,為什么不重新置為0,可以想一想,肯定是為了防止用戶恰好在異步提交的時(shí)候又有點(diǎn)擊動(dòng)作,那么在提交成功后,就會(huì)清除這一部分的數(shù)據(jù),保證數(shù)據(jù)同步性。
//接口沒(méi)使用框架,原生的一個(gè)思路,具體根據(jù)你的業(yè)務(wù)要求去實(shí)現(xiàn)就可以了。如果跨域就使用jsonp。當(dāng)然服務(wù)器端也可以先用緩存,最后定時(shí)異步寫(xiě)入數(shù)據(jù)庫(kù)是最好,如果數(shù)據(jù)量不大,直接寫(xiě)庫(kù)也無(wú)所謂了。

TA貢獻(xiàn)3593條經(jīng)驗(yàn) 獲得超0個(gè)贊
- 4 回答
- 1 關(guān)注
- 3582 瀏覽
添加回答
舉報(bào)