2015-02-09 210 views
1

我在CoffeeScript的以下功能:回調咖啡腳本

@get_person = (person_id) -> 
    $.ajax '/people/'+person_id, 
    type: 'GET' 
    dataType: 'text' 
    error: (jqXHR, textStatus, errorThrown) -> 
     $('body').append "AJAX Error: #{textStatus}" 
    success: (data, textStatus, jqXHR) -> 
     $('.right-bar').html(data) -> 
      alert 1 
      $('#interaction_filter').chosen() 

$('.right-bar').html(data) -> 

作品完美,但回調低於,不執行的一部分。我究竟做錯了什麼?控制檯中也沒有顯示任何內容。

+0

這個回調應該做什麼?你期望的JS代碼是什麼? – Bergi 2015-02-09 19:43:42

+0

它基本上在選擇框中調用所選的(https://github.com/tsechingho/chosen-rails)。我有其他的選擇框,內容不通過AJAX加載,他們加載罰款。 然而,當我在控制檯上鍵入$('#interaction_filter')。chosen()時,它工作正常。 所以我認爲這是因爲當.chosen被調用時數據仍然被加載到DOM中,因此我將它添加爲回調,因此它會等待「數據」完全加載到DOM中 – 2015-02-09 19:47:16

+0

請參閱我的回答下面的問題。 – 2015-02-09 21:09:32

回答

0

通過CoffeeScript的編譯器,我得到以下輸出它運行後:

this.get_person = function(person_id) {}; 

$.ajax('/people/' + person_id, { 
    type: 'GET', 
    dataType: 'text', 
    error: function(jqXHR, textStatus, errorThrown) { 
    return $('body').append("AJAX Error: " + textStatus); 
    }, 
    success: function(data, textStatus, jqXHR) { 
    return $('.right-bar').html(data)(function() { 
     alert(1); 
     return $('#interaction_filter').chosen(); 
    }); 
    } 
}); 

我相信你想要做的是連鎖的HTML()的調用。如果是的話,它應該是這樣的:

@get_person = (person_id) -> 
    $.ajax '/people/'+person_id, 
     type: 'GET' 
     dataType: 'text' 
     error: (jqXHR, textStatus, errorThrown) -> 
      $('body').append "AJAX Error: #{textStatus}" 
     success: (data, textStatus, jqXHR) -> 
      $('.right-bar').html(data).html -> 
       alert 1 
       $('#interaction_filter').chosen() 
+0

不幸的是,它仍然無法正常工作。 $('。right-bar').html(data).html 雖然有效!但不是警報1 – 2015-02-09 19:42:16

+0

@MichaelVictor抱歉,我認爲我有一點點錯誤。我假設你想在get_person()函數內調用$ .ajax,因爲在代碼中使用了person_id。我編輯了上面的帖子來反映這一點。 – 2015-02-09 23:47:32

-1

的CoffeeScript是空白敏感的,所以你需要縮進回調的身體使其成爲功能的一部分。

安東尼指出了你原來代碼中的第幾行編譯成

this.get_person = function(person_id) {}; 

$.ajax('/people/' + person_id, { 
.... 

換句話說,分配不沒事this.get_person功能,然後進行一個Ajax調用。

假設你想要的AJAX調用函數內發生,然後嘗試:

@get_person = (person_id) -> 
    $.ajax '/people/'+person_id, 
     type: 'GET' 
     dataType: 'text' 
     error: (jqXHR, textStatus, errorThrown) -> 
      $('body').append "AJAX Error: #{textStatus}" 
     success: (data, textStatus, jqXHR) -> 
      $('.right-bar').html(data) -> 
       alert 1 
       $('#interaction_filter').chosen() 

縮進$.ajax線使得回調函數的一部分。

如果你想要更多的在這裏嘗試對Try Coffeescript

+2

'.html(data) - >'部分實際上是不起作用的。他成功地執行了ajax調用,這必定是問題中的標記問題。 – Bergi 2015-02-09 21:52:37

+0

ajax沒有錯。 – 2015-02-10 17:04:40

+0

不再有了,在編輯之前在原始問題中添加了第2行的縮進。 – 2015-02-11 15:19:35

1

的解決方案不能WIRTE:

$('.right-bar').html(data) -> 

語法不允許,可以改爲確定這個

$('.right-bar').html (data) -> 

如下所示:http://api.jquery.com/html/

請考慮增加html和(數據)之間的空間 - >

+0

我很確定這不是OP想要的。請解釋它的作用。 – Bergi 2015-02-09 21:50:35

-1

您應該添加HTML內的空間,(數據) - >

$('.right-bar').html (data) -> 

你就是不使用 html()語法正常。

html(function(data){})是允許的。

html(data) function(){}是他寫的。

額外的空間是關鍵。因爲你在html(data)之後聲明瞭一個函數,它在你的代碼中從來沒有被調用過。

看到這裏的解決方案:Solution

+0

我很確定這不是OP想要的。請用這種方式解釋它的作用。 – Bergi 2015-02-09 21:51:01

+1

他只是不正確地使用'html()'語法。 'html(function(data){})'是允許的。 'html(data){}'是他正在寫的東西。 – 2015-02-10 15:22:19

+1

它被*允許*,但你真的知道[它是什麼意思](http://api.jquery.com/html/)? – Bergi 2015-02-10 15:27:00