2016-03-09 115 views
1

我在Rails中编写了一个非常简单的待办事项应用程序。无法让jQuery的ajaxSuccess()工作

查看:

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)。为什么?

UPDATE:

我刚刚读到jquery-ujs火灾ajax:success事件,所以我也尝试:

bindEvents:() => 
    console.log 'test1' 
    $('#new_todo').on('ajax:success', @onAjaxSuccess) 

还不行。

+0

什么是预期的结果? – guest271314

+0

@ guest271314预期的结果是在控制台中打印'test2'。 – pmichna

+0

是一个在'js'上调用的ajax请求吗? – guest271314

回答

0

的问题是,不'ajax:success'被解雇,但'ajax:error.'在XHR我返回的HTML元素和jQuery试图解析它作为JSON(提示:结合'ajax:complete',看看你会得到什么错误)。

解决方案 - 形态改变数据类型:

= form_for(Todo.new, url: {action: 'create'}, remote: true, html: { data: {type: :html} }) do |form| 
    = form.text_field :text 
    = form.submit 'Add' 
1

@onAjaxSuccess: (event, xhr, settings) -> 

应该

onAjaxSuccess: (event, xhr, settings) -> 

,以便它被添加到prototype并与this

+0

这并没有帮助。 – pmichna

+1

似乎在https://jsfiddle.net/gaby/uqwvhk7m/ –

0

注访问,还没有试过coffeescript

是一个阿贾克斯请求在javascript问题?

.ajaxSuccess()的第二个参数是jqXHR对象。当对象作为参数传递时,append()似乎不会引发错误,但不会将对象作为字符串追加到元素。

var obj = {"abc":"123"}; 
$("body").append(obj); 

如果一个Ajax请求被form在做出提交form.submit?,你应该能够使用$("#todo_list").append(xhr.responseText)追加Ajax请求元件的响应。

+0

工作ajax请求 - 这是由Rails完成的。我收到了我想要的回复。 我甚至没有进入'onAjaxSuccess'方法,所以这个问题不涉及'append'。 – pmichna

+0

'@ onAjaxSuccess'是在'$(document).ajaxSuccess(@onAjaxSuccess)','bindEvents'之后定义的吗?你有没有尝试在'@onAjaxSuccess后面放置'bindEvents':(event,xhr,settings) - >'?还是他们分开功能?在$(document).ajaxSuccess(@onAjaxSuccess)事件处理程序被定义之前是否提交了'form'? – guest271314