Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Coffeescript中的Ajax轮询-哪些内容超出了范围,为什么?_Javascript_Jquery_Coffeescript_Polling - Fatal编程技术网

Javascript Coffeescript中的Ajax轮询-哪些内容超出了范围,为什么?

Javascript Coffeescript中的Ajax轮询-哪些内容超出了范围,为什么?,javascript,jquery,coffeescript,polling,Javascript,Jquery,Coffeescript,Polling,当生成预览所需的图像被后台工作人员缓存(这可能需要一些时间)时,我希望重新加载iframe 它第一次运行成功,之后每次我都会 未捕获的语法错误:意外标识符 表示某些内容超出了范围。我的粗略猜测是,您正在丢失setInterval中的“this”绑定,因为setInterval发生在窗口上。我会抛出一个console.log来检查“this”,或者在setInterval内的匿名函数中绑定/包装@loadWhenCache()。不过,我已经有一段时间没有使用coffeescript了,所以可能是

当生成预览所需的图像被后台工作人员缓存(这可能需要一些时间)时,我希望重新加载iframe

它第一次运行成功,之后每次我都会
未捕获的语法错误:意外标识符


表示某些内容超出了范围。

我的粗略猜测是,您正在丢失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)