使用AJAX读取对象属性失败,无法向HTML追加内容求助
问题排查与修复方案
核心问题分析
后端C#代码问题
你的后端返回的不是有效JSON数据:
- 用
return myData.ToString();返回匿名对象的字符串形式,只会得到类似<>f__AnonymousType0的类型名称,完全不是前端能解析的JSON格式。 - 定义的
bigCities列表未被使用,属于无效代码。
前端jQuery代码问题
- 注释了
datatype: 'json',即使后端返回正确JSON,前端也可能无法自动将响应解析为对象。 - 使用已被弃用的
async: false同步请求,会阻塞浏览器运行,还可能触发异常。 result.forEach(function (result) {})中参数名与外层result变量重名,会导致变量覆盖,逻辑混乱。- 后端返回的是单个对象,你却用数组专属的
forEach方法遍历,直接会报错;$.each虽能遍历对象属性,但后续追加HTML的逻辑是按数组元素处理,完全不匹配数据结构。
修复步骤
1. 修复后端C#代码
如果要返回myData对象,需返回标准JSON格式,修改Get方法:
[HttpGet] public IActionResult Get() { var myData = new { Host = @"sftp.myhost.gr", UserName = "my_username", Password = "my_password", SourceDir = "/export/zip/mypath/", FileName = 1 }; // 返回JSON格式响应 return Ok(myData); }
如果实际要返回bigCities数组,就改成return Ok(bigCities);,根据业务需求选择即可。
2. 修复前端jQuery代码
场景1:后端返回单个myData对象
$(document).ready(function () { $.ajax({ url: `${siteRootUrl}api/order`, dataType: 'json', // 开启JSON类型指定,确保前端解析响应 type: "GET", success: function (res) { // 直接遍历对象属性并追加到HTML $.each(res, function(key, element){ $('#a').append(`<tr><td>${key}: ${element}</td></tr>`); }); }, error: function (xhr, status, error) { // 打印错误详情方便排查,不要只弹模糊提示 console.error('请求错误:', status, error); alert('请求失败,请查看控制台日志'); } }); });
场景2:后端返回bigCities数组
$(document).ready(function () { $.ajax({ url: `${siteRootUrl}api/order`, dataType: 'json', type: "GET", success: function (res) { // 遍历数组元素追加到HTML res.forEach(function(city){ $('#a').append(`<tr><td>${city}</td></tr>`); }); }, error: function (xhr, status, error) { console.error('请求错误:', status, error); alert('请求失败,请查看控制台日志'); } }); });
额外排查建议
- 打开浏览器开发者工具(F12),切换到Network标签,查看请求的响应内容,确认后端返回的是否为标准JSON。
- 查看Console标签,检查是否有JavaScript报错,这能快速定位前端逻辑问题。
内容的提问来源于stack exchange,提问作者Aze
相关产品推荐
相关产品推荐

