ASPX页面加载脚本报Uncaught SyntaxError: Unexpected token '<'错误如何解决?
问题原因
报错Uncaught SyntaxError: Unexpected token '<'的核心原因是:浏览器请求JS脚本资源时,服务器返回的不是合法的JS代码,而是HTML文档(HTML文档以<开头,浏览器尝试按JS语法解析时就会抛出该错误)。
注释一个script标签报错就减少一个,完全符合该逻辑:每少一个错误的JS资源请求,就少一次解析HTML为JS的报错。
CSS正常加载、JS异常的原因
该差异通常由以下两类问题导致:
- 服务端渲染问题:你使用的
head标签加了runat="server"属性,属于服务端控件,script标签的src属性中使用<%= ResolveUrl() %>内联表达式时,默认不会被服务端解析,最终渲染到前端的src会直接保留<%= ResolveUrl("~/js/xxx.js") %>这段字符串,请求该无效地址时服务端会返回当前登录页的HTML。而link标签的href属性在服务端控件容器内会被自动处理,所以可以正常解析路径。 - 权限配置问题:如果站点使用了Forms身份验证,通常会默认配置允许匿名访问
css目录,但未开放js目录的匿名访问权限。未登录状态下请求JS资源时,服务端会自动跳转到登录页,返回登录页的HTML内容。
解决方案
按优先级从高到低尝试:
- 根因验证
按F12打开浏览器开发者工具,切换到「网络」标签,刷新页面后点击任意一个加载失败的JS请求,查看「响应」内容,确认返回的是不是HTML页面,即可确定属于上述哪类问题。 - 修复服务端解析问题
如果是src没有被正确解析,可选择任意一种处理方式:- 在页面的
Page_Load事件中添加代码,强制解析head控件内的绑定表达式:
同时把script标签的src中的protected void Page_Load(object sender, EventArgs e) { Header.DataBind(); }<%= %>替换为<%# %>:<script src="<%# ResolveUrl("~/js/jquery3.5.1.js")%>"></script> - 不需要修改后台代码,直接去掉
head标签的runat="server"属性(如果你不需要在服务端操作head内的内容,该方案最简单)。
- 在页面的
- 修复权限配置问题
如果是JS目录没有开放匿名访问,在web.config中添加如下配置即可:<location path="js"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> - 临时验证方案
也可以先直接写死相对路径测试,比如登录页在站点根目录的话,直接写成:
如果测试正常,就说明确实是路径解析的问题。<script src="js/jquery3.5.1.js"></script>
内容的提问来源于stack exchange,提问作者Gustavo Souza da Rosa
相关产品推荐
相关产品推荐

