ASP.NET Core 2 API遇XML Parsing Error: no root element found问题求助
搞定ASP.NET Core 2 + Ajax的XML解析错误问题
嘿,我太懂这种Postman调用正常但Ajax就翻车的糟心情况了!你遇到的XML Parsing Error: no root element found,本质上是前端和服务器在数据格式上没对上——Postman会自动帮你处理请求头,但Ajax得手动配置,咱们一步步来排查解决:
最可能的原因:请求头没配置对
ASP.NET Core的API会根据请求里的Accept头来决定返回什么格式的数据,如果你的Ajax没告诉服务器“我要JSON”,它可能默认返回XML,而你的前端没处理XML,就会报这个错。
赶紧给你的Ajax代码加上这两个关键请求头,或者直接指定dataType:
$.ajax({ url: '/api/favorites/', type: 'GET', // 换成你实际用的请求方法,比如POST dataType: 'json', // 直接告诉jQuery我要JSON格式的响应 headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, success: function(data) { // 这里处理返回的数据就好 }, error: function(xhr, status, err) { console.log(err); } });
检查API是否真的返回了有效数据
虽然Postman调用正常,但要确认Ajax请求触发时,API有没有返回空响应或者格式不对的内容。比如某些逻辑在Ajax请求时返回了null而不是空数组?
修改你的API代码,确保无论什么情况都返回合法的JSON:
[HttpGet] public IActionResult GetFavorites() { var favorites = _favoriteService.GetAll(); // 就算没有数据,也返回空数组,别让响应空着 return Ok(favorites ?? new List<Favorite>()); }
排查页面里的其他jQuery代码干扰
你说同一页面还有其他JS代码,说不定全局的Ajax设置被改了——比如有人全局设置了dataType: 'xml'?
这种情况下,在你的Ajax请求里显式指定dataType: 'json'就能覆盖全局设置,就是上面代码里加的那行,亲测有效!
调试小妙招
打开浏览器F12的Network面板,找到你的API请求:
- 看Request Headers里的
Accept是不是application/json - 看Response Headers里的
Content-Type是不是application/json; charset=utf-8 - 看Response的内容是不是正经的JSON,如果是空的或者XML,那就是服务器端的锅,回去调API逻辑
按上面的步骤来,应该很快就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者Yusuf Y.
相关产品推荐
相关产品推荐

