我经常搜索,但我无法掌握从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()
问题源于load
和refresh
方法。如您所见,我们可以导致无限循环。 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类方法的行为