2011-11-01 56 views
3

我有以下腳本:的CoffeeScript和jQuery.post()成功:回調

$ -> 
    $('#new_event').submit -> 
     $.post(
      $(this).attr('action') 
      $(this).serialize() 
      success: (data, textStatus, jqXHR) -> 
       processData(data, textStatus, jqXHR) 
     ) 
     return false 

processData = (data, textStatus, jqXHR) -> 
    alert(data) 

現在爲止,我不能爲我的生命調試此。它呈現爲:

(function() { 
    var processData; 
    $(function() { 
    return $('#new_event').submit(function() { 
     $.post($(this).attr('action'), $(this).serialize(), { 
     success: function(data, textStatus, jqXHR) { 
      return processData(data, textStatus, jqXHR); 
     } 
     }); 
     return false; 
    }); 
    }); 
    processData = function(data, textStatus, jqXHR) { 
    return alert(data); //BREAKPOINT HERE 
    }; 
}).call(this); 

這看起來對我來說還好。如果我在alert上放置斷點,它永遠不會停在那裏。我的JavaScript知識非常有限,所以我顯然在這裏錯過了一些東西。想知道發生了什麼。

謝謝, Dany。

回答

12

我覺得你的CoffeeScript是好的,但你$.post論點是錯誤的。從fine manual

jQuery.post(url [, data] [, success(data, textStatus, jqXHR)] [, dataType])

所以你不$.post使用success: fn(...)參數,你只要給它一個函數:

$ -> 
    $('#new_event').submit -> 
     $.post(
      $(this).attr('action') 
      $(this).serialize() 
      (data, textStatus, jqXHR) -> 
       processData(data, textStatus, jqXHR) 
     ) 
     false 

processData = (data, textStatus, jqXHR) -> 
    alert(data) 

甚至:

$ -> 
    $('#new_event').submit -> 
     $.post(
      $(this).attr('action') 
      $(this).serialize() 
      processData 
     ) 
     false 

processData = (data, textStatus, jqXHR) -> 
    alert(data) 

或:

$ -> 
    $('#new_event').submit -> 
     $.post(
      $(this).attr('action') 
      $(this).serialize() 
      (data, textStatus, jqXHR) -> 
       alert(data) 
     ) 
     false 

,如果你不介意額外的壓痕,不需要processData別處。

+0

你是絕對正確的 - 謝謝你! – codedog

+0

@ muistooshort謝謝 - 這是有幫助的 - 如果我從服務器接收JSON,這是一個recrds集合,例如「@用戶」 - 我將如何處理回調函數。我必須使用如下所示:$ .each(data,processData(user) - >然後代碼。任何意見非常讚賞。 – BKSpurgeon

+0

@BKSpurgeon我有點不清楚你的情況是什麼,你問過包含更多的細節問題? –