如何修复“Uncaught SyntaxError: Unexpected token <”错误

6

我有一段Javascript代码,之前在PHP5.6上运行良好。然而,当我升级到PHP7.2后,它停止工作并出现以下错误:

VM505:2 Uncaught SyntaxError: Unexpected token <
    at Function.globalEval (jquery.tools.min.js:49)
    at Function.httpData (jquery.tools.min.js:152)
    at XMLHttpRequest.x.onreadystatechange (jquery.tools.min.js:149)
globalEval  @   jquery.tools.min.js:49
httpData    @   jquery.tools.min.js:152
x.onreadystatechange    @   jquery.tools.min.js:149
XMLHttpRequest.send (async)     
ajax    @   jquery.tools.min.js:150
chkpwd  @   hw.php:295
onclick @   hw.php:877

我无法理解错误提示中说的是hw.php的295行chkpwd函数,但实际上该函数在387行。因此,我不知道应该去哪里寻找问题。

如何调试和修复这个问题?

function chkpwd() {

  var pwd_val = $("#engpassword").val();

  $.ajax({
    url: 'password.php',
    dataType: 'jsonp',
    jsonp: 'processData',
    data: {
      pwd: pwd_val,
      callback: 'pwdaction'
    },
    error: function(xhr) {
      alert('Ajax request error!');
      $(e.target).attr('disabled', false);
    }
  }); 
}

1
你在函数末尾缺少 } - Moad Ennagi
2
你的PHP脚本(或Web服务器)发送的是HTML而不是JSON。通常这是因为脚本试图报告错误。尝试直接加载脚本(而不是通过ajax),或将其作为非JSONP AJAX请求加载,以便您可以查看原始输出。 - Daniel Beck
抱歉,我在源代码中没有粘贴最后的}。我刚刚更新了它。 - Stonez
@Daniel Beck,从哪里查看原始输出? - Stonez
如果脚本中存在语法错误,您可以直接在浏览器中加载脚本以查看错误消息。如果这不会触发错误,请将您的ajax请求更改为其他内容,并使用console.log记录响应。 - Daniel Beck
5个回答

8
通常它指的是一个响应,而不是可解析的JSON,返回的却是一个HTML,它的开头标签以<开始。

3
只需打开您的网络浏览器检查器并检查服务器的响应:https://cdn-images-1.medium.com/max/1600/1*O1xWZKun2J2hHe6LmoNyBA.gif - Mosè Raguzzini
谢谢!我在返回值中找到了一个尖括号'>'。删除后,一切都恢复正常了! - Stonez
在我的情况下,我指定给工作进程的路径并不是正确的路径。 - Prashant naik

2
如果您正在使用React应用程序并在控制台中看到此错误,则可能是由于index.html文件中的脚本标记缺少“type”属性造成的。确保包含type="text/jsx"。
另外,您尝试访问的URL未返回Javascript或JSON,而是HTML,请为您的脚本标记的“src”属性提供正确的路径,该路径以“ / ”开头,后跟.js文件的路径。
我参考了以下链接,可以看一下,因为我只是简单介绍了这篇文章中的内容:https://idiallo.com/javascript/uncaught-syntaxerror-unexpected-token#n 附言 - 请查看文章评论部分。

1
只需在公共文件夹中的index.html中添加 `type="text/jsx"` 即可。
<script src="./src/index.js" type="text/jsx"></script>

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0
在我的情况下(Webpack v.5 + React),它发生在具有第二个或更多嵌套页面级别的页面上。所有资产都使用相对路径包含,例如。因此,对于嵌套页面,会出现错误。
要修复它,需要添加 如果您正在使用webpack,可以添加:
const htmlWebpackPlugin = new HtmlWebpackPlugin({
  template: path.resolve(__dirname, 'src', 'index.html'),
  title: WebSiteName,
  base: isLocal ? 'http://localhost:4008' : 'http://yoursitename.com',
});

这将注入元素<base href="...">


0
如果你正在使用像React这样的SPA框架工作,这个问题也可能是由于SPA应用程序的启动失败引起的。在我的情况下,端口9999已经被占用。
只需找到该进程并终止它,然后一切都会正常工作。 lsof -i TCP:9999

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接