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

使用jQuery Ajax调用类库中控制器时出错,附相关代码

排查jQuery Ajax调用类库控制器的错误

咱们一步步来拆解你遇到的问题,从代码里能看到几个关键的错误点,逐个解决就能搞定:

1. 路由配置冲突 + 属性路由未启用

你现在的路由配置里有两个模板完全一样的路由:{controller}/{action}/{id},而且Default路由在前面。MVC路由是按顺序匹配的,所有请求都会先命中Default路由,后面的Business路由根本不会被触发。另外,你控制器上用了[Route]属性,但没有在路由配置里启用属性路由,导致这个注解根本不起作用。

解决方法:

修改RouteConfig.cs,先启用属性路由,然后删除重复的Business路由:

// 先启用属性路由,这行要放在MapRoute之前
routes.MapMvcAttributeRoutes();

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

如果你的控制器在另一个类库中,还要确保MVC能找到它,给默认路由加上命名空间:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    // 替换成你的类库控制器所在的命名空间
    namespaces: new[] { "YourClassLibrary.Controllers" }
);

2. 返回JSON的方式错误

你控制器里返回的是一个JSON格式的字符串,然后用Json(myresult, JsonRequestBehavior.AllowGet)包装,这会导致MVC把这个字符串再转义成JSON字符串。比如前端拿到的会是"{'name':'John', 'age':31, 'city':'New York' }",而不是预期的JSON对象,这会触发dataType: 'json'的解析错误,进入error回调。

解决方法:

直接返回匿名对象或模型,让MVC自动序列化正确的JSON:

[HttpGet]
[Route("Business/GetCountries")]
public JsonResult GetCountries(string countryName) {
    // 直接用匿名对象,MVC会自动转成正确的JSON
    var myresult = new { 
        name = "John", 
        age = 31, 
        city = "New York" 
    };
    return Json(myresult, JsonRequestBehavior.AllowGet);
}

3. Ajax请求的优化(可选但更规范)

你的Ajax请求里async: false会阻塞浏览器,影响用户体验,建议改成async: true。另外,明确传递参数(即使是空值),方便后续扩展,同时在error回调里打印responseText,能更直观看到后端返回的错误信息:

baseUrl = "/Business/GetCountries";
function getCountries() {
    var obj = {};
    obj.countryName = '';
    $.ajax({
        type: 'GET',
        url: baseUrl,
        dataType: 'json',
        async: true, // 改成异步,避免阻塞浏览器
        data: obj, // 明确传递参数
        success: function (data) {
            console.log(data);
        },
        error: function (err) {
            // 打印错误详情,方便排查
            console.log("错误信息:", err.responseText);
        }
    });
}

按照上面的步骤调整后,应该就能正常调用到类库中的控制器并拿到正确的JSON数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:07