【发布时间】:2016-06-23 05:25:58
【问题描述】:
我正在 Rails 中编写一个非常简单的待办事项应用程序。
查看:
h2 Your todos
ul#todo_list
= render @todos
hr
h4 Add new
= form_for(Todo.new, url: {action: 'create'}, remote: true) do |form|
= form.text_field :text
= form.submit 'Add'
CoffeeScript:
class Todo
constructor: () ->
@bindEvents()
bindEvents: () =>
console.log 'test1'
$(document).ajaxSuccess(@onAjaxSuccess)
onAjaxSuccess: (event, xhr, settings) ->
console.log 'test2'
$('#todo_list').append(xhr)
@isPresent: (element_id) ->
$("##{element_id}").length > 0
$(()->
new Todo if Todo.isPresent('todos')
)
当我创建一个新的待办事项时,test1 会打印在控制台中。我得到了正确的 200 响应。 @onAjaxSuccess() 方法不会被触发(test2 不会被打印)。为什么?
更新:
我刚刚读到 jquery-ujs 会触发 ajax:success 事件,所以我也尝试过:
bindEvents: () =>
console.log 'test1'
$('#new_todo').on('ajax:success', @onAjaxSuccess)
还是不行。
【问题讨论】:
-
预期结果是什么?
-
@guest271314 预期的结果是在控制台打印'test2'。
-
在问题
js处调用 ajax 请求吗? -
@guest271314 是的,一个ajax请求是因为表单有
data-remote=true属性,而rails的jquery-ujs在这里使用ajax。 -
您是否检查过网络选项卡以确认是否发出请求?或者如果响应是错误消息?
标签: jquery ruby-on-rails ajax coffeescript