返回Coffeescript中的Ajax请求结果

时间:2012-02-06 15:51:53

标签: ajax coffeescript

仍然关注CoffeeScript并了解其能力。

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

例如:

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

我想要返回数据。有没有巧妙的方法在CoffeeScript中执行此操作,还是只需要声明变量?

由于

2 个答案:

答案 0 :(得分:5)

由于它是异步的,你无法真正返回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时要理解的最重要的概念之一。

答案 1 :(得分:0)

如上所述,这与浏览器中的异步自然javascript有关。 CoffeeScript的“补丁”直接处理(添加异步/延迟),请参阅http://maxtaco.github.com/coffee-script/。对于你的例子,它就像是(根据我对它的理解,在我身边猜测):

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

还有许多其他javascript库,它们也可用于类似目的。但请注意,当您的脚本正在等待数据时,浏览器可能会显示为“挂起”(不确定“延迟”功能是否继续处理javascript事件)。