I was following cookbook and having a problem for the ajax part. I can click plus or minus to change the value for the first time, but it doesn't update the value next time it's clicked. Also, I don't get any flash message like 'you voted already' or 'vote recorded'.
What am I missing ? Controller ----------------------------------------------- def news_comments(): news = db.news(request.args(0)) or redirect(URL('categories')) if auth.user: db.comment.news.default = news.id db.comment.posted_on.default = request.now db.comment.posted_by.default = auth.user.id form = crud.create(db.comment) comments = db(db.comment.news==news.id).select(orderby=db.comment.posted_on) return locals() @auth.requires_login() def vote(): if not request.env.request_method=='POST': raise HTTP(400) news_id, mode = request.args(0), request.args(1) news = db.news(id=news_id) vote = db.vote(posted_by=auth.user.id, news=news_id) votes = news.votes value = (mode=='plus') and +1 or -1 if vote and value*vote.value==1: message = 'you voted already' else: if vote: votes += value - vote.value vote.update_record(value=value) else: votes += value db.vote.insert(value=value, posted_by=auth.user.id, posted_on=request.now, news=news.id) news.update_record(votes=votes) message ='vote recorded' return "jQuery('#votes').html('%s');jQuery('.flash').\ html('%s').slideDown();" % (votes, message) View - news_comment.html --------------------------------- {{extend 'layout.html'}} <h5>{{=A(news.title, _href=news.link)}}</h5> {{if auth.user:}} <span id="votes">{{=news.votes}}</span> <button id="plus" onclick="ajax('{{=URL('vote', args=(news.id, 'plus'))}}', [], ':eval')">plus</button> <button id="minus" onclick="ajax('{{=URL('vote', args=(news.id, 'minus'))}}', [], ':eval')">minus</button> {{=form}} {{pass}} <table> {{for comment in comments:}} <tr> <td>{{=comment.posted_on}}</td> <td>{{=comment.posted_by.first_name}}: </td> <td>{{=MARKMIN(comment.body)}}</td> </tr> {{pass}} </table>