- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在页面加载后运行脚本。这不能通过预编译的 asset-pipeline 来完成,因为脚本中使用了页面加载时 Controller 中生成的 ruby 变量。这是我调用脚本的简化版本:
<script type='text/javascript' charset='utf-8'>
var url = "/assets/foo/bar.js";
$(window).on('load', function(){
console.log('page-loaded and url is: ' + url);
$.getScript( url, function() {
console.log('loaded bar.js');
});
});
</script>
行为是第一个 console.log 在页面加载时触发,但 getScript 中的第二个 console.log 从不运行。
由于我的第一个控制台日志中显示了 url,因此我可以获取控制台输出中显示的值,将其粘贴到浏览器的地址栏中(域名后面),然后将脚本成功加载到页面中,如下所示文本 - 所以 url 引用没有问题。
接下来,我将脚本(本例中为 bar.js)简化为输出 ruby 变量的单个 console.log 语句。这是可行的,所以我的原始js中一定有错误,但任何控制台输出中都没有显示错误。
如何解决这个 javascript 的问题,在 javascript 控制台(在 firefox 开发工具中)或 Rails 控制台中没有出现错误类型/行#? Rails 是否在其他地方记录错误?
请注意,rails-console 中没有任何迹象表明 getScript 执行/加载了任何内容 - 无论是工作脚本还是神秘损坏的脚本,如果这是一个像这样的 ajax 调用,就会出现这样的问题:
How to troubleshoot silently failing js in Rails?
我没有包含 js 文件,因为我不需要帮助对 javascript 进行故障排除如果我可以获得有关错误性质的反馈。如何让错误出现在某处?
编辑 - 我尝试内联粘贴脚本,代替“getScript”调用。它仍然默默地失败。唯一的区别是,我从脚本内获得了第一个 console.log() 输出,以及分页符上的其他一些内容,这些内容之前有效,表明存在 js 错误,这仍然是一个未报告的谜团.
编辑#2:
@jfriend00 建议 #9 的三个错误是:
SyntaxError: missing ; before statement
Stack trace:
.globalEval/<@http://127.0.0.1:3000/assets/jquery.js?body=1:339:5
.globalEval@http://127.0.0.1:3000/assets/jquery.js?body=1:340:1
.converters["text script"]@http://127.0.0.1:3000/assets/jquery.js?body=1:9739:4
ajaxConvert@http://127.0.0.1:3000/assets/jquery.js?body=1:8809:8
done@http://127.0.0.1:3000/assets/jquery.js?body=1:9226:4
.send/callback@http://127.0.0.1:3000/assets/jquery.js?body=1:9686:8
new:234
Object { readyState: 4, getResponseHeader: .ajax/jqXHR.getResponseHeader(), getAllResponseHeaders: .ajax/jqXHR.getAllResponseHeaders(), setRequestHeader: .ajax/jqXHR.setRequestHeader(), overrideMimeType: .ajax/jqXHR.overrideMimeType(), statusCode: .ajax/jqXHR.statusCode(), abort: .ajax/jqXHR.abort(), state: .Deferred/promise.state(), always: .Deferred/promise.always(), then: .Deferred/promise.then(), 11 more… } new:235
"parsererror"
很高兴知道哪个语句缺少分号(我没有看到任何缺少),或者这个错误是否在解析器本身内,由于脚本中的某些内容导致错误解析。
编辑#3 - 尝试了更多@jfriend00建议如果我将脚本内联,以便使#11成为可能,因为我的脚本调用另一个jquery函数,由数千行组成。不过,对于没有外部组件的小脚本来说,这将是很棒的。
对于 #10 - 我在末尾放置了一个 console.log() 。内联版本运行到最后并显示该输出,但只是不执行任何其他它应该执行的操作。然而,getScript 方法永远不会运行或回调任何内容,除非通过错误方法(在上面的编辑 #2 中列出),验证在这种情况下是否检测到错误。 IOW,相同的脚本代码内联“运行但不起作用”,但如果通过 getScript 检索则“出错”。
我想我只需将所有页面特定的脚本内联放置并接受丑陋。然后,我可以通过添加 console.log() 来执行“二分搜索”方法,以在每个阶段输出所有可能的数据位,因为它是随机猜测来确定哪个设置/值导致任何问题。
最佳答案
由于我们无法真正知道导致问题的原因,因此我们能做的最好的事情就是列出一堆内容供您检查:
您的脚本是否执行任何 document.write()
调用,因为在文档加载完成后执行此操作会清除当前文档并掩盖正在发生的情况。
您正在加载的脚本是否可能除了定义等待调用的函数之外实际上没有执行任何操作。
您是否尝试过使用静态脚本标记加载脚本只是为了看看它是否可以这样工作?这也将把它放在顶层(而不是在 $.getScript()
的内部,您可能更有可能看到任何脚本错误。
您是否 200% 确定传递给 $.getScript()
时路径正确?
您是否查看过 Chrome 调试器中的网络选项卡,了解服务器实际请求和返回的内容?您应该看到请求发出并返回响应。
您是否清除了浏览器缓存,以防旧版本(可能是空版本)的文件卡在缓存中? Chrome 中的网络选项卡还会告诉您文件是从服务器还是从缓存加载。您可以向 URL 添加随机数来阻止缓存:
var url = "/assets/foo/bar.js?"+ Math.random();
这需要一些时间,但您可以在未最小化版本的 jQuery 中单步执行 $.getScript()
。您必须弄清楚在哪里设置断点,因为响应是异步返回的,但这最终会让您准确地看到它得到了什么响应以及该响应正在做什么。
如果将完成回调放在 $.getScript()
上作为第二个参数,则该回调的参数会报告什么?
$.getScript(url, 函数(数据, textStatus, jqXhr) {
控制台.log(文本状态);
控制台.log(数据);
控制台.log(jqXhr);
});
如果您在 $.getScript()
上设置错误处理程序,它会被调用吗?
$.getScript(url).fail(function( jqxhr, 设置, 异常) {
控制台.log(异常);
控制台.log(jqxhr);
控制台.log(设置);
});
如果您确定脚本开始执行但随后失败,则可以调试该脚本。执行此操作的简单方法是在其上撒上独特的 console.log()
语句,这样您就可以准确地看到它已经走了多远,并迭代到越来越精细的行号级别,直到缩小范围准确地找到失败的地方(本质上是二分搜索)。
您还可以在动态加载的脚本中靠近脚本顶部的位置放置一个 debugger;
语句来触发调试器,然后您可以单步执行脚本的其余部分以查看其中的位置它失败了。
关于javascript - 通过 Getscript 检索的脚本无提示地失败 - 如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478870/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!