同一个脚本放在 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 '<'

3421 次点击
所在节点    JavaScript
46 条回复
luob
2020-12-29 22:15:00 +08:00
你的 js 路径写错了
AmrtaShiva
2020-12-29 22:20:33 +08:00
@luob src=“js/xxx.js”不是这样吗? js 目录在项目根目录下
ljpCN
2020-12-29 22:58:47 +08:00
检查控制台 network,看看 js 文件有没有正常请求到
AmrtaShiva
2020-12-29 23:03:43 +08:00
@ljpCN network-->ALL Status 都是 200
AmrtaShiva
2020-12-29 23:05:16 +08:00
@ljpCN
这是请求到了吧
```
Request URL: http://127.0.0.1:9090/js/yiji.js
Request Method: GET
Status Code: 200 OK
Remote Address: 127.0.0.1:9090
Referrer Policy: no-referrer-when-downgrade
Content-Type: text/html; charset=utf-8
Date: Tue, 29 Dec 2020 15:03:06 GMT
Transfer-Encoding: chunked
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: keep-alive
Cookie: remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6Im9sWWFhdTNTOWpCTFlPV2J0SHV6NXc9PSIsInZhbHVlIjoiUnJBbUtwS2VsRW11aXZTNkJEeFVQWWd2SmFZT1lHRURIVzRQN1VzUUxOQVwvM2dKYVQ2N0VCUURHcGVOdDJROVdyZzFldkdOaDcycDQ3ZDhqVStxcFVZaFV4U0N2S0lYSjg1K0djcXp6TE9INDFVZzZ3cVZNbWQzMFZNTXdCZlZMSTZzTVY3OFZDV0VqXC85SG1vUnhReExnVVwvRUVrYmdWK0ZFUHdpYk40T0FrYzRtd01vRlJmbnRpUkViNEtBV2hIIiwibWFjIjoiNzQxMTY1N2RmMDFhNzBkYmQyMjRkMzY2MTlkZjMwY2I2OGVkZGQ2YTlmYmJmOGZlNDIyMjg1ZjYyOGEzNWY0NyJ9; CSRF-Token-PBX43=MbUAFxPTqikYRgErQScXUuRFLe4XAijK; PHPSESSID=7v3dn9n3efn6h797en57n3n19u; _ga=GA1.1.30054837.1559550150; counter=181
dnt: 1
Host: 127.0.0.1:9090
Referer: http://127.0.0.1:9090/ccal
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
sec-gpc: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
```
forzalianjunting
2020-12-29 23:20:10 +08:00
Content-Type: text/html
forzalianjunting
2020-12-29 23:20:48 +08:00
Content-Type 有问题
AmrtaShiva
2020-12-29 23:36:52 +08:00
@forzalianjunting 这怎么改 有办法吗?
flyhaozi
2020-12-29 23:42:13 +08:00
就第二个错误来看,像是 js 里不小心混进 html 代码了
AmrtaShiva
2020-12-29 23:46:39 +08:00
@flyhaozi js 代码就是上面帖的这个...
turan12
2020-12-29 23:47:50 +08:00
加一句 request.setRequestHeader("Content-type","application/json");
AmrtaShiva
2020-12-30 00:11:12 +08:00
@turan12 加了也不行.....
flyhaozi
2020-12-30 00:16:41 +08:00
@AmrtaShiva 看一下上面请求的 response 内容和原本的 js 文件一样吗?
AmrtaShiva
2020-12-30 00:23:13 +08:00
@flyhaozi 不一样 network-All-Response 里面是另一个 html 页面的内容
flyhaozi
2020-12-30 00:46:52 +08:00
@AmrtaShiva 那这应该是 web 服务器的问题,具体要看你静态文件服务器是什么、怎么配置的了
ss098
2020-12-30 03:31:44 +08:00
无关 Content Type,据我分析是 DOM 未加载完成就调用了这个 jinshen 函数,提升引用外部 script 在页面中的顺序即可。
AmrtaShiva
2020-12-30 03:36:26 +08:00
@ss098 head 里面引用也不行 晕
ss098
2020-12-30 03:38:42 +08:00
@AmrtaShiva 提供的信息不够,也可以把 HTML 结构贴出来。
AmrtaShiva
2020-12-30 04:19:44 +08:00
@ss098
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>吉凶宜忌</title>
</head>

<body>

<a href="/"> <button onchange="home()"><b>返回主界面</b></button></a>
<div id="btn" style="text-align: center;">
<button id="btny1" onclick="jinshen()">金神</button>
</div>
<div id="ym" style="text-align: left;">
<p id="y1"></p>
</div>

<script type="text/javascript" src="js/yiji.js">
/* 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', '/ccal', true);
request.send();
} */
function home() {
window.open("/")
}
</script>
</body>

</html>
ljpCN
2020-12-30 05:04:37 +08:00
看一下 js 文件请求的返回内容,是不是你的 js 文件内容。控制台 network 标签页,js 文件的请求,点进去看 preview

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

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

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

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

© 2021 V2EX