【问题标题】:jQuery Uncaught RangeError: Maximum call stack size exceeded when using setTimeoutjQuery Uncaught RangeError:使用 setTimeout 时超出了最大调用堆栈大小
【发布时间】:2016-03-13 11:30:17
【问题描述】:

我正在尝试创建一个实时通知脚本,每次在我的文件中找到特定文本时,它都会播放声音。这是我尝试过的:

<script type="text/javascript" src="jquery-2.1.3.min.js"></script>
<script type="text/javascript">
    function getTextfile() {
        $.get('myfile.txt', { cache:false }, function(data) {
            if (data.indexOf("Hello World") > -1) {
                document.write("Hello World is found");
                var audio = new Audio('wb.wav');
                audio.play();
            } else {
                document.write("It's NOT found");
                var audio = new Audio('wn.wav');
                audio.play();
            } 
            setTimeout(getTextfile, 1000);
        },'text');
    } 
    getTextfile();
</script>

myfile.txt 看起来像这样:

Line one
line two
Hello World
line four

但是在我的 chrome 浏览器上我得到了这个错误:

未捕获的 RangeError: 超出最大调用堆栈大小`

myfile.txt 动态变化,因此每次找到我要查找的文本或找不到它时,它都应该播放不同的声音,而无需我刷新浏览器。我该如何解决这个问题?

【问题讨论】:

  • 你试过增加超时延迟吗?
  • 这与问题无关,但请注意,您将 cache: false 作为请求的参数发送,您并没有停止 jQuery 缓存响应。如果您想停止缓存,请使用$.ajax 并设置cache: false,或者在您的$.get 请求之前调用$.ajaxSetup([ cache: false })
  • wm.wav 和 wb.wav 文件的大小是多少?您是否尝试过不加载这些文件的行?
  • 您能否在jsfiddle.net 中设置此问题的示例,因为我看不出您在此代码中遇到错误的原因。你确定是这个代码块导致了问题吗?
  • 在我看来,sn-p 中没有任何内容明显是“错误的”。你能缩小具体是什么破坏的范围吗?

标签: javascript jquery


【解决方案1】:

我找到了导致问题的原因,是 document.write() 造成的。在我摆脱 document.write() 之后,一切都运行良好。谢谢

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2011-12-01
    • 1970-01-01
    • 2014-06-11
    • 2016-10-19
    • 2019-11-25
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多