【问题标题】:Return Results of Ajax Request in Coffeescript在 Coffeescript 中返回 Ajax 请求的结果
【发布时间】:2012-02-28 02:10:35
【问题描述】:

我仍然在研究 CoffeeScript,看看它的能力。

我编写了一个进行 ajax 调用的方法,我想返回结果。

例如:

GetViewedItem: (foo) ->
    $.ajax '/Foo/Bar/',
    type: 'GET',
    data: { id: $(foo).data('fooId') }
    success: (data) ->
        data

我想返回数据。在 CoffeeScript 中是否有一种巧妙的方法可以做到这一点,还是我只需要声明一个变量?

谢谢

【问题讨论】:

标签: ajax coffeescript


【解决方案1】:

您不能真正以这种方式返回 AJAX 请求的数据,因为它是异步的。这意味着,在调用成功回调时,您的 GetViewedItem 方法将已完成执行。

通常,您会继续对成功回调中的 AJAX 数据执行任何操作,或者从成功回调中调用相应处理数据的方法。

handleViewedItem: (data) ->
    // Do something now that the AJAX call is complete.

GetViewedItem: (foo) ->
    $.ajax '/Foo/Bar/',
        type: 'GET',
        data: { id: $(foo).data('fooId') }
        success: (data) ->
            handleViewedItem data

这可能是使用 JS 和 AJAX 时要理解的最重要的概念之一。

【讨论】:

  • 充分意识到这一点。只是不知道coffeescript 是否有一种呈现这段代码的奇特方式。我猜不是?
  • 对不起,我不是故意的。我尽量回答一般性的问题,以帮助任何未来的读者。
  • 如果函数需要保持异步,你不能真的return数据。
  • 别担心,一点也不居高临下。我认为我没有很好地解释我对这个问题的理解。
  • 感谢 Sandro 的解释,对我帮助很大。
【解决方案2】:

如前所述,这与浏览器中的异步 JavaScript 特性有关。 CoffeeScript 有一个“补丁”可以直接处理这个问题(添加 async/defer),请参阅 http://maxtaco.github.com/coffee-script/ 。对于您的示例,它将类似于(根据我对它的理解在我这边猜测):

GetViewedItem: (foo) ->
  await $.ajax '/Foo/Bar/'
    type: 'GET'
    data: { id: $(foo).data('fooId') }
    success: defer data
  data

还有许多其他 javascript 库也可用于类似目的。但请注意,当您的脚本等待数据时,浏览器可能会出现“挂起”(不确定“defer”函数是否继续处理 javascript 事件)。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2013-11-08
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2018-10-25
    • 2012-02-09
    相关资源
    最近更新 更多