Javascript Coffeescript中的Ajax轮询-哪些内容超出了范围,为什么?
当生成预览所需的图像被后台工作人员缓存(这可能需要一些时间)时,我希望重新加载iframe 它第一次运行成功,之后每次我都会Javascript Coffeescript中的Ajax轮询-哪些内容超出了范围,为什么?,javascript,jquery,coffeescript,polling,Javascript,Jquery,Coffeescript,Polling,当生成预览所需的图像被后台工作人员缓存(这可能需要一些时间)时,我希望重新加载iframe 它第一次运行成功,之后每次我都会 未捕获的语法错误:意外标识符 表示某些内容超出了范围。我的粗略猜测是,您正在丢失setInterval中的“this”绑定,因为setInterval发生在窗口上。我会抛出一个console.log来检查“this”,或者在setInterval内的匿名函数中绑定/包装@loadWhenCache()。不过,我已经有一段时间没有使用coffeescript了,所以可能是
未捕获的语法错误:意外标识符
表示某些内容超出了范围。我的粗略猜测是,您正在丢失setInterval中的“this”绑定,因为setInterval发生在窗口上。我会抛出一个console.log来检查“this”,或者在setInterval内的匿名函数中绑定/包装@loadWhenCache()。不过,我已经有一段时间没有使用coffeescript了,所以可能是“@”造成的。您有两个错误:
loadWhenCached
的返回值而不是loadWhenCached
函数本身调用setInterval
loadWhenCached
未绑定到任何对象,因此调用它时,此
将不是您所期望的setInterval(@loadWhenCached, 3000) # No function-calling parentheses
您的版本正在调用loadWhenCached
,而setInterval
的参数列表正在生成中,而不是由setInterval
调用
第二个可以通过各种方式固定。您可以使用以下方法将loadWhenCached
设为绑定方法:
或者,您可以在调用setInterval
时使用以下命令绑定它:
setInterval(@loadWhenCached.bind(@), 3000)
你从哪里得到的错误?这与范围无关;这可能意味着您的服务器正在返回无效的JSON.Hmm。跳进去监视服务器,看起来它的服务很好。这个错误消息指向javascript语言中的某些东西什么是“javascript语言中的某些东西”?诸神啊!我从未意识到函数引用和调用函数本身之间的区别。这一切现在都有意义了!mu太短了,感谢您抽出时间打印您的答案-我非常感谢!
loadWhenCached: =>
#...
setInterval(@loadWhenCached.bind(@), 3000)