Laravel使用AJAX提交同名多输入表单无法正确识别参数问题
问题原因
- 你将
serialize()得到的表单序列化字符串,封装为了formdata字段的值提交给后端,后端只会将整段字符串识别为formdata参数的值,不会自动解析字符串内部的参数结构,自然无法直接拿到service_name数组 - 序列化表单时使用了全局选择器
$(".ajax#servicesForm"),会把页面上所有符合条件的表单数据全部拼接,导致提交内容中出现多组_token、id参数的异常情况
修复方案
直接修改JS提交逻辑即可,后端Laravel代码无需调整:
jQuery("form.ajax").on("submit", function (e) { e.preventDefault(); // 仅序列化当前触发提交事件的表单,避免拼接其他表单数据 const serializedForm = $(this).serialize(); jQuery.ajax({ url: "/admin/adminpanel/insertService/", type: "post", // 直接传入序列化后的表单数据,不要额外封装对象 data: serializedForm, dataType: "JSON", success: function (response) { console.log(response); // 后续可直接通过 response.service_name 拿到数组格式的参数 }, error: function (jqXHR, exception) { var msg = ""; if (jqXHR.status === 0) { msg = "未连接,请检查网络。"; } else if (jqXHR.status === 404) { msg = "请求的页面不存在 [404]"; } else if (jqXHR.status === 500) { msg = "内部服务器错误 [500]"; } else if (exception === "parsererror") { msg = "JSON解析失败"; } else if (exception === "timeout") { msg = "请求超时"; } else if (exception === "abort") { msg = "请求被中止"; } else { msg = "未知错误\n" + jqXHR.responseText; } console.log(msg); } }); });
验证方式
修改后后端可以直接通过$request->service_name获取到数组格式的参数,返回的响应中也会呈现和原生表单提交一致的结构。
内容的提问来源于stack exchange,提问作者Thando Hlophe
相关产品推荐
相关产品推荐

