如何同步返回ajax调用的结果

时间:2015-05-04 15:16:13

标签: javascript coffeescript

我经常搜索,但我无法掌握从ajax调用的成功方法返回数据的基本原理。我通常是ruby dev,并且完全理解js / coffeescript的最佳实践是一个障碍。

我有一个类似这样的CS文件:

$ ->
  $.when(Foo.load()).done (data) ->
  # manipulate data

但是这个“数据”来自浏览器中的缓存对象或者ajax调用的成功响应。以下是Foo

的一些信息
class @Foo
   _now = new Date().getTime()
   _expiration = new Date(_now).setHours(24, 0, 0, 0) #24 hours from now

  @save: (data) ->
    record = { value: JSON.stringify data, timestamp: _expiration }
    localStorage.setItem('responseData', JSON.stringify record)

  @load : ->
   record = JSON.parse localStorage.getItem('responseData')
   if record and _now < record.timestamp
     JSON.parse record.value
   else
     Foo.refresh()

  @refresh : ->
    $.ajax(
      url: '/data'
      dataType: 'JSON'
      type: 'post'
      async: false
      success: (data) ->
        Foo.save data.results
    )
    Foo.load()

问题源于loadrefresh方法。如您所见,我们可以导致无限循环。 load调用refresh,会调用load,呼叫refresh,依此类推。

我正在寻找的是一种在load()方法中从ajax方法返回响应的方法,因此它的执行方式与JSON.parse record.value

相同
if record and _now < record.timestamp
     JSON.parse record.value
else
  # RETURN the result of the successful ajax call, this would mean that when we call $.when(Foo.load()).done we would have waited for the ajax call to run.

如果有人有任何提示,我们将不胜感激!我很乐意根据需要详细说明。

ajax调用async属性是否与它有关?我以为这是Foo

中2类方法的行为

0 个答案:

没有答案