同一个脚本放在 body 里面可以运行 放到外部 js 文件报错

2020-12-29 22:07:53 +08:00
 AmrtaShiva

function jinshen() {
    var request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
            var info = request.responseText;
            var js = JSON.parse(info);

            var j1 = js.JinShen1;
            var j2 = js.JinShen2;
            var j3 = js.JinShen3;
            var jinsheninfo = j1 + "<br>" + j2 + "<br>" + j3;

            var p = document.getElementById("y1");
            p.innerHTML = jinsheninfo;

        };
    };
    // 发送请求:
    request.open('POST', '/xxx', true);
    request.send();
}
xxx:15 Uncaught ReferenceError: jinshen is not defined
    at HTMLButtonElement.onclick (xxx:15)
Uncaught SyntaxError: Unexpected token '<'

3438 次点击
所在节点    JavaScript
46 条回复
AmrtaShiva
2020-12-30 06:02:24 +08:00
@ljpCN
func main() {
flag.Usage = func() {
fmt.Println("usage ccal-web -l port")
flag.PrintDefaults()
}
p := flag.Int("l", 9090, "")
flag.Parse()

fmt.Println("https://github.com/Aquarian-Age/ccal-gui/tree/master/web 下载 webUI 页面")

http.HandleFunc("/", home)
http.HandleFunc("/ccal", yiJi)
http.HandleFunc("/today", todayInfo)
http.HandleFunc("/jz60", selectlist)

port := fmt.Sprintf(":%d", *p)
err := http.ListenAndServe(port, nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
yiji.js 文件请求的竟然是主页页面 而不是 ccal 页面.....
mostkia
2020-12-30 09:00:08 +08:00
Uncaught SyntaxError: Unexpected token '<'
这个报错有时候可能是你引用的 js 包的 src 地址为空导致的。建议检查一下看看有没有引用外部的 script 标签里的 src 是空的,这个错误没法靠调试查出问题
mywaiting
2020-12-30 09:06:54 +08:00
同一个脚本放在 body 里面可以运行 放到外部 js 文件报错

不看代码,盲猜你的这段 JS 代码应该使用 DOMContentLoaded 事件在页面加载完成再触发

简单点就是把你的这个函数放 window.onload = function(){ xxxxxxxxxxxxx } xxxxx 就是你的代码
mx1700
2020-12-30 09:32:17 +08:00
外部引用的 script 标签内部不要放任何东西,其他 js 再写一个没有外部引用的 script 标签放进去
cw2k13as
2020-12-30 09:47:25 +08:00
Content-Type: text/html; charset=utf-8 ;你这个有点问题吧
cw2k13as
2020-12-30 09:49:45 +08:00
@cw2k13as network 》 yiji.js 》 response 里面看看返回的什么
JerryCha
2020-12-30 11:14:47 +08:00
1. 先调试一下路由,确保确实能请求到 js 文件
2. 保证 js 脚本在页面加载完成后运行
AmrtaShiva
2020-12-30 13:45:20 +08:00
@cw2k13as 29 楼已经写了
AmrtaShiva
2020-12-30 13:46:00 +08:00
@JerryCha 两个没发现问题 因为就一个路由
AmrtaShiva
2020-12-30 13:46:42 +08:00
@mx1700 没看懂😂
mx1700
2020-12-30 13:54:07 +08:00
<script type="text/javascript" src="js/yiji.js">这里不要放任何东西</script>
WishMeLz
2020-12-30 14:08:44 +08:00
script 标签在使用外链的时候,里面别放东西,在写一个 script 标签。顺序也很重要
ljpCN
2020-12-30 14:09:36 +08:00
@AmrtaShiva 那应该的确是你的请求路径有问题,web 服务器找不到于是 fallback 到 index.html 了。最好找个身边的人现场帮你看吧,这样排查效率太低了。
AmrtaShiva
2020-12-30 14:18:27 +08:00
@ljpCN 我只能在这里问了 谢谢你的回复
zhoushiya
2020-12-30 14:23:48 +08:00
script 既然已经外链了,怎么<script></script>之间还写 js 代码?
ciddechan
2020-12-30 14:27:21 +08:00
window.onload 后执行
AmrtaShiva
2020-12-30 14:32:58 +08:00
@JerryCha main 函数 http.HandleFunc("/ccal", yiJi) 改为 http.HandleFunc("/yiji", yiJi)之后打开浏览器还是请求到了 http://127.0.0.1:9090/ccal 的页面....这是路由不对了?
AmrtaShiva
2020-12-30 14:39:32 +08:00
@AmrtaShiva 上面这个原因找到了 是 home.html 里面定义了跳转链接 把这个跳转链接写成 ccal 了 脚本外部执行问题还是不行
AmrtaShiva
2020-12-30 14:41:16 +08:00
@zhoushiya 那个是之前写的 因为不知道原因在那儿 而且这方面也不懂 就一边琢磨一边看
source
2020-12-30 15:05:24 +08:00
xxx:15 Uncaught ReferenceError: jinshen is not defined
body 中能跑,外部引用 js 报错,这个应该是因为执行顺序的问题,外部 js 脚本需要 html 解析完后才开始请求,此时 onclick 绑定的 jinshen 方法还没有声明,解决方法参考 @mywaiting #23 @ciddechan #36 在你的业务代码外部包 onload 即可。

Uncaught SyntaxError: Unexpected token '<'
语法解析错误没法精确定位,但是根据描述,可能是服务端没有正确返回请求的 js,返回了一个兜底的 html 。需要你手动排查一下。

<script type="text/javascript" src="js/yiji.js">// 业务代码 balabala</script>
script 标签不要同时指定 src 属性又在内部书写 js 代码,这种情况下,内部代码会被直接忽略。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/740141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX