【问题标题】:CoffeeScript and jQuery.post() success: callbackCoffeeScript 和 jQuery.post() 成功:回调
【发布时间】:2014-05-22 04:41:26
【问题描述】:

我有以下脚本:

$ ->
    $('#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 知识非常有限,所以我显然在这里遗漏了一些东西。很想知道发生了什么。

谢谢, 丹妮。

【问题讨论】:

    标签: jquery coffeescript


    【解决方案1】:

    我认为你的 CoffeeScript 没问题,但你的 $.post 参数是错误的。来自fine manual

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

    所以你不要将success: fn(...) 参数与$.post 一起使用,你只需给它一个函数:

    $ ->
        $('#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

    【讨论】:

    • @muistooshort 谢谢 - 这很有帮助 - 如果我从服务器接收到 JSON,它是记录的集合,例如“@users” - 我将如何在回调函数中处理它。我是否必须使用类似的东西: $.each(data,processData(user) -> 然后是代码。非常感谢任何建议。
    • @BKSpureon 我有点不清楚你的具体情况,你问过一个包含更多细节的问题吗?
    • @muistooshort 嘿,谢谢,基本上我想知道如何使用从服务器返回的 JSON 数据遍历咖啡脚本中的记录集合。
    • @BKSpureon data 在这种情况下不会是一个数组吗?那你不会像其他数组一样循环遍历它吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多