2012-06-05 50 views
0

我有一個控制器的動作看起來像這樣 -返回錯誤阿賈克斯行動決定

def upvote 
     @post = Post.find(params[:id]) 
     if user_has_rated_post? 

     # I want to interrupt AJAX here 

     redirect_to[:forum, @post.question], :notice => "You already voted for this post" 
     else 
     @post.upvote 
     add_rating_to_post(1, @post) 
     @post.save 

     redirect_to[:forum, @post.question], :notice => "Post Up Voted" 
     end 
    end 

,我有一個AJAX調用了投票後,除了我需要它來停止其工作完全正常AJAX調用如果第一個條件,user_has_rated_post?得到滿足。

所以問題是我該如何中斷或迫使一個錯誤返回到AJAX,或者我應該試圖以另一種方式去做?

回答

1

是的,你必須返回一些jQuery(或你的AJAX解決方案)解釋爲錯誤。然後你將不得不在javascript代碼中處理這個錯誤(或者如果這樣做就不做任何事情)。我認爲400以上的任何東西都被認爲是錯誤的。查看HTTP狀態代碼列表,並選擇最適合您的那個http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。在這裏,我會打賭403 - 服務器瞭解請求,但拒絕履行它。你總是可以渲染500,但我認爲最好是具體。

+0

感謝您的回答,我設法解決它後不久,但您的答案正是我所做的,只是返回了一個403 :) – Cristian