模态弹窗视图引用jQuery脚本后POST请求跳转异常求助
解决引入jQuery后POST请求跳转到JSON页面的问题
这问题我之前碰到过好几次,核心原因是引入jQuery后,你的表单提交行为被悄悄改变了——大概率是chosen.js或者你自己的代码默认把表单提交变成了AJAX请求,导致后端返回的重定向响应被当成JSON数据直接渲染,而不是触发浏览器跳转。下面给你几个针对性的解决思路:
强制表单使用普通提交模式
如果是ASP.NET MVC项目,你可以在生成表单时添加data-ajax="false"属性,直接禁用AJAX提交行为,让浏览器按传统方式处理表单:@using (Html.BeginForm("Save", "YourController", FormMethod.Post, new { data_ajax = false })) { // 表单内容及chosen下拉框 }纯HTML表单的话,直接手动加属性即可:
<form action="/YourController/Save" method="post" data-ajax="false"> <!-- 表单元素 --> </form>修正AJAX提交后的跳转逻辑
如果你确实需要保留AJAX提交(比如要做表单验证提示),那就要在后端和前端配合处理重定向:- 后端修改返回逻辑,检测AJAX请求时返回重定向URL的JSON:
[HttpPost] public ActionResult Save(YourModel model) { // 数据保存逻辑... if (Request.IsAjaxRequest()) { return Json(new { redirectUrl = Url.Action("Index") }); } return RedirectToAction("Index"); } - 前端在表单提交的AJAX回调里手动触发跳转:
$('form').submit(function(e) { e.preventDefault(); var form = $(this); $.post(form.attr('action'), form.serialize(), function(response) { if (response.redirectUrl) { window.location.href = response.redirectUrl; } }); });
- 后端修改返回逻辑,检测AJAX请求时返回重定向URL的JSON:
检查chosen.js的初始化影响
部分版本的chosen.js可能会对所在表单的提交事件做劫持,你可以在初始化chosen时,确保没有意外阻止默认提交:$(".chosen-select").chosen({ placeholder_text_single: "请选择", // 你的其他配置 }).off('submit'); // 移除可能绑定的submit事件监听
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

