2016-03-09 83 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