Mis*_*hko 12 ajax jquery ruby-on-rails jquery-post ruby-on-rails-3
当用户单击特定项时,我使用jQuery的post方法更新数据库中的内容:
$.post("/posts/" + post_id + "/update_something",
{ some_param: some_value },
success_handler);
Run Code Online (Sandbox Code Playgroud)
这里update_something看起来是这样的:
def update_something
post = Post.find(params[:id])
post.update_attributes(:some_field => params[:some_param])
render :nothing => true
end
Run Code Online (Sandbox Code Playgroud)
问题是如果update_attributes失败,请求仍然成功并success_handler执行.
如果update_attributes失败,我怎么能导致请求失败,以至于success_handler不会被执行?
Cal*_*vin 28
您可以render :status => 400在Rails中执行(或其他一些错误代码),这将触发error回调$.ajax(),或者您可以使用错误消息呈现一些JSON:
render :json => { :success => false }
然后在你的success_handler函数中你会:
function success_handler (response) {
if (response.success) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
哦,update_attributes失败时返回false.因此,您可以基于此呈现您的回复.
2年后编辑:
几年后看到这有几个upvotes,我强烈建议使用该status: 400方法而不是渲染200.它是errorAJAX请求中的处理程序的用途,应该以这种方式使用.
好吧,你必须添加一个错误处理程序,并给它一个错误来处理。所以,在你的 JavaScript 中:
$.post( "/posts/" + post_id + "/update_something",
{ some_param : some_value }
)
.done( successHandler )
.fail( errorHandler ) // define errorHandler somewhere, obviously
;
Run Code Online (Sandbox Code Playgroud)
在 Rails 中:
def update_something
post = Post.find params[ :id ]
success = post.update_attributes :some_field => params[ :some_param ]
head success ? :ok : :internal_server_error
end
Run Code Online (Sandbox Code Playgroud)
注意:这里 500可能是也可能不是合适的错误代码——在400s 和 500s中选择合适的那个。
| 归档时间: |
|
| 查看次数: |
11161 次 |
| 最近记录: |