首次开发Angular应用遇$http.get请求错误:SyntaxError: Unexpected token n
解决Angular $http.get JSON解析错误:SyntaxError: Unexpected token n in JSON at position 17
嘿,这个错误其实指向性很强——Angular在尝试解析你从angular/orders.json获取的内容时,发现JSON格式不合法,在第17个字符的位置碰到了意外的n,直接导致JSON.parse解析失败。咱们一步步来排查解决:
1. 优先检查orders.json的语法问题
JSON对语法要求非常严格,哪怕一个小疏漏都会触发解析错误。你打开这个文件,定位到第17个字符的位置,看看是不是犯了这些常见错误:
- 键名没有用双引号包裹(比如写了
{name: "Order1"}而不是{"name": "Order1"}) - 字符串用了单引号而非双引号(JSON完全不允许单引号)
- 数组/对象最后一项后面多写了逗号
- 加了JSON不支持的注释(// 或 /* */ 注释在JSON里是非法内容)
给你一个符合代码预期的正确JSON示例(因为你的sort.orders是数组类型):
[ {"id": 1, "title": "订单1", "amount": 99}, {"id": 2, "title": "订单2", "amount": 199} ]
2. 验证JSON的合法性
如果肉眼看不出问题,可以把orders.json的内容复制到浏览器控制台测试,比如输入:
JSON.parse('这里粘贴你的JSON内容')
控制台会给出更精准的错误位置和原因,跟着提示修正即可。
3. 确认请求返回的内容是否正确
有时候可能是文件路径写错了,导致请求返回的不是JSON,而是404的HTML错误页面,这时候解析自然会失败。你可以打开浏览器开发者工具(按F12),切换到Network标签,找到orders.json的请求,查看Response标签里的内容,确认返回的是你预期的JSON,而非错误页面。
4. 优化Angular代码(让它更健壮)
另外提一句,你代码里用的success方法已经被Angular弃用了,建议换成then和catch来处理请求,这样能更清晰地捕获错误,方便后续排查:
var app = angular.module('sortApp', []) app.controller('sortController', ['$http', function ($http) { var sort = this; sort.orders = []; $http.get('angular/orders.json') .then(function (response) { sort.orders = response.data; }) .catch(function (error) { console.error('请求或JSON解析出错:', error); // 这里可以给用户显示友好的错误提示 }); }]);
这样下次再出问题,你能在控制台看到更详细的错误信息,包括实际返回的响应内容,排查起来会更高效。
内容的提问来源于stack exchange,提问作者Max Gavrilov
相关产品推荐
相关产品推荐

