通过Ajax向控制器传递多数组时出现Uncaught TypeError错误
问题解决步骤
1. 修复数组填充的错误代码
你在example_append函数里的dayids.push($(this).attr(day));是错误的:
- 你已经通过
var day = $(questionid).find('option:selected').attr('id');拿到了选中选项的ID值,直接把day推入数组即可,不需要用$(this).attr(day)(这里的$(this)上下文不对,且day是属性值而非属性名,会导致推入undefined)。
修改后:
dayids.push(day);
2. 修正AJAX配置的两个问题
(1)参数拼写错误
ajaxasync是拼写错误,正确的参数名是async。
(2)添加数组序列化配置
当传递多个数组到MVC控制器时,需要开启traditional: true,让jQuery用传统方式序列化数组,否则MVC无法正确绑定数组参数,同时会触发Illegal invocation错误。
修改后的ap函数:
function ap() { $.ajax({ type: "post", url: '@Url.Action("SelectAnswer", "Reservations")', async: true, traditional: true, data: { day: dayids, fromdate: fromdateids, todate: todateids }, success: function (data) { // 可添加成功后的处理逻辑 }, error: function (data) { // 可添加错误提示逻辑 } }); }
3. 验证全局数组的正确性
每次调用example_append后,可在控制台打印数组确认有效值:
console.log(dayids, fromdateids, todateids);
确保三个数组长度一致,且每个元素都不为空或undefined。
控制器代码无需修改
你的控制器方法SelectAnswer参数定义正确,只要前端参数格式正确,就能正常接收。
内容的提问来源于stack exchange,提问作者and waojd
相关产品推荐
相关产品推荐

