Rails 3.1 ajax:成功处理
所以我在使用 CoffeeScript、Rails 3.1 和所有好东西.我有一个包含所有常用路线索引、显示、创建、编辑、更新、销毁的资源.
So Im playing with CoffeeScript, Rails 3.1 all the good stuff. I have a resource with all the usual routes index, show, create, edit, update, destroy.
索引视图有一个使用 :remote => 的表单.真的
像这样:
The index view has a form that uses :remote => true
like so:
<%= form_for @todo, :remote => true do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
在用于创建的控制器中,我有以下内容:
In the controller for create I have the following:
def create
@todo = Todo.new(params[:todo])
respond_to do |format|
if @todo.save
format.html { redirect_to @todo, notice: 'Todo was successfully created.' }
format.json { render json: @todo, status: :created, location: @todo }
format.js {render json: @todo }
else
format.html { render action: "new" }
format.json { render json: @todo.errors, status: :unprocessable_entity }
end
end
end
我试图不使用 .js.erb 视图,因为我宁愿处理返回的 JSON 并将所有花哨的附加到待办事项列表等等.(我觉得它更干净).
Im trying to not use .js.erb views as I would rather handle the JSON returned and do all the fancy appends to the todo list and so on. (It just feels cleaner to me).
在我的 todos.js.coffee 中,我使用了以下内容:
In my todos.js.coffee I have used the following:
$(document).ready ->
$("#new_todo")
.bind "ajax:success", (event, data) ->
alert("Ajax SUCCESS!!!")
(是的,只是打开警告框不起作用)我尝试加载但无法触发此事件.请求确实成功完成并添加了新的待办事项.
(Yeah just tyting to open an alert box does not work) I tried loads but just cannot trigger this event. The request does complete successfully and the new todo is added.
对此的任何帮助将不胜感激.谢谢
Any help with this would be appreciated. Thanks
推荐答案
开始倒在 rails.js 上,想知道是否有任何 ajax: 回调被引发.
Started to pour over the rails.js and wondered if any of the ajax: callbacks were being raise.
原来他们在 beforeSend 和错误...等一下...错误?这怎么可能?新待办事项的创建成功发生,响应是我期望的 JSON.但是在单步执行回调代码时,我注意到 Invalid label
错误.
Turned out they were well the beforeSend and error... hang on... error? How could this be? The creation of the new todo happens successfully, the response is the JSON I expect. But on stepping through the callback code I notice an Invalid label
error.
稍后快速谷歌将我带到这篇文章 http://blog.seqmedia.com/?p=484
Quick google later brings me to this post http://blog.seqmedia.com/?p=484
原来 JSON 是作为字符串返回的,Firbug 得到了它并正确解析了它,所以我可以检查响应.但是rails.js和js一般不知道如何处理字符串并抛出上述错误(我可能会默默地说).
Turns out the JSON is being returned as a string, Firbug got that and parsed it correctly so I could check the response. However rails.js and js in general didnt know how to handle the string and threw the above error (rather silently I may say).
解决方案在respond_to中
The solution was in the respond_to
format.js {render json: @todo, content_type: 'text/json' }
有点感谢 Trevor Burnham(就像这本书 BTW)的帮助和来自 sequence media 的 Amy,他的博文最终给了我解决办法.
A bit thanks to Trevor Burnham (like the book BTW) for his help and Amy from sequence media whose blog post ultimately gave me the solution.
相关文章