在Index.cshtml中调用Site.js内Ajax函数报错求助
问题分析与解决方案
核心问题排查
你的代码存在4个关键错误,导致函数无法调用或Ajax请求失败:
- 函数作用域限制:Site.js中用
$(function updateTable() { ... })定义函数,会把updateTable封装在jQuery就绪函数的局部作用域里,外部(Index.cshtml)无法访问。 - MVC路由路径错误:ASP.NET MVC的控制器路由不需要加
Controller后缀,/HomeController/SendDataToTable应该改为/Home/SendDataToTable。 - HTML转义字符错误:.js文件中不需要使用HTML转义(如
<、"),直接写正常的HTML标签即可,否则jQuery无法正确创建DOM元素。 - 缺少错误回调:没有Ajax请求失败的处理逻辑,无法排查请求失败原因。
修正后的代码
1. Site.js 修正版
// 定义全局可访问的updateTable函数 function updateTable() { $.ajax({ url: '/Home/SendDataToTable', // 修正路由路径 dataType: 'JSON', type: 'GET', success: function (data) { var tbody = $('#mytable tbody'); tbody.empty(); $.each(data, function (index, a) { // 使用正常HTML标签,去掉转义字符 var row = $('<tr>'); row.append($('<td class="col-md-1">').text(a.Id)); row.append($('<td class="col-md-1">').text(a.name)); row.append($('<td class="col-md-1">').text(a.address)); tbody.append(row); }); }, // 添加错误回调,便于排查问题 error: function(xhr, status, error) { console.error('请求失败:', status, error); console.error('响应内容:', xhr.responseText); } }); } // 可选:页面加载完成后自动执行一次 $(function() { updateTable(); });
2. Index.cshtml 修正版
@section Scripts{ <!-- 确保先引入Site.js,路径根据实际项目结构调整 --> <script src="~/js/Site.js"></script> <script> $(function () { updateTable(); // 初始化表格数据 setInterval(function () { updateTable(); }, 5000); // 每5秒刷新一次表格 }); </script> }
3. 控制器方法补充(HomeController)
确保SendDataToTable方法是公开的,并且返回正确的Json格式:
// ASP.NET MVC 版本 public JsonResult SendDataToTable() { // 示例数据,替换为你的实际数据源 var data = new List<YourModel> { new YourModel { Id = 1, name = "张三", address = "北京市朝阳区" }, new YourModel { Id = 2, name = "李四", address = "上海市浦东新区" } }; // 允许GET请求访问Json结果 return Json(data, JsonRequestBehavior.AllowGet); } // ASP.NET Core 版本 public IActionResult SendDataToTable() { var data = new List<YourModel> { new YourModel { Id = 1, name = "张三", address = "北京市朝阳区" }, new YourModel { Id = 2, name = "李四", address = "上海市浦东新区" } }; return Json(data); // Core默认允许GET请求 }
额外排查步骤
- 按F12打开浏览器控制台,查看是否有函数未定义、404路由错误或数据格式异常的提示。
- 确认Site.js的引入路径正确,可通过控制台的"网络"标签查看是否成功加载该文件。
- 直接在浏览器地址栏访问
/Home/SendDataToTable,确认能返回合法的JSON数据。
内容的提问来源于stack exchange,提问作者Maherotti
相关产品推荐
相关产品推荐

