仍然关注CoffeeScript并了解其能力。
我编写了一个调用ajax的方法,我想要返回结果。
例如:
GetViewedItem: (foo) ->
$.ajax '/Foo/Bar/',
type: 'GET',
data: { id: $(foo).data('fooId') }
success: (data) ->
data
我想要返回数据。有没有巧妙的方法在CoffeeScript中执行此操作,还是只需要声明变量?
由于
答案 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事件)。