You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中AJAX调用Action返回JSON却跳转至纯JSON页面怎么解决?

问题解决方法

核心问题原因

你遇到的跳转问题本质是@Html.ActionLink渲染出来的是原生<a>标签,点击时默认会触发href跳转行为,你绑定的点击事件中没有阻止该默认行为,导致AJAX请求发起的同时页面直接跳转到了请求地址,自然无法触发success回调。

修复步骤

1. 阻止a标签默认跳转行为

修改你的AJAX绑定代码,增加默认行为阻止逻辑,同时显式指定返回数据类型为JSON避免解析异常:

$('.GetData_Action').click(function (e) {
    // 阻止a标签默认的页面跳转,这是解决当前问题的核心
    e.preventDefault();
    RememberVerticalScroll();
    $.ajax({
        url: this.href,
        type: 'GET',
        // 显式指定返回数据类型为JSON
        dataType: 'json',
        success: function (result) {
            categoryID = result.categoryId;
            ShowProducts();
            // 可选:拿到返回的滚动位置后恢复页面滚动
            if(result.VerticalScroll) {
                $(window).scrollTop(result.VerticalScroll);
            }
        },
        // 可选:增加错误回调方便排查问题
        error: function (err) {
            console.error('请求失败:', err);
        }
    });
});

2. 如需改用POST请求的修复方案

你之前用POST报错的原因是控制器的GetData方法标记了[HttpGet],只接受GET请求,POST请求无法匹配到该方法,修改方式如下:

  • 控制器代码修改:将[HttpGet]改为[HttpPost],同时可以移除JsonRequestBehavior.AllowGet配置(POST请求不需要该配置)
[HttpPost]
public JsonResult GetData(int categoryID, int level)
{
    string VerticalScrollPosition;
    if (Session["VertScrollPos"] != null)
    {
        VerticalScrollPosition = Session["VertScrollPos"].ToString();
        Session["VertScrollPos"] = null; // 重置Session
    }
    else
    {
        VerticalScrollPosition = null;
    }
    return Json(new { categoryId = categoryID , VerticalScroll = VerticalScrollPosition });
}
  • AJAX代码修改:将type参数改为POST即可

额外注意事项

如果修改后点击事件仍未触发,请确认事件绑定代码放在DOM加载完成的回调中,避免DOM未渲染完成就执行绑定逻辑导致绑定失效:

// 页面DOM加载完成后再执行绑定
$(function(){
    $('.GetData_Action').click(function (e) {
        // 上述业务逻辑
    });
});

内容的提问来源于stack exchange,提问作者Mobygo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:06:02