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

JQuery Ajax无法向Action方法传递数据的问题求助

解决AJAX无法传递数据到后端Action的问题

问题原因

你设置了contentType: "application/json; charset=utf-8",但直接传递普通JavaScript对象作为data参数时,jQuery不会自动将其序列化为JSON字符串,而是会按表单格式编码发送,导致后端无法解析JSON格式的数据,最终接收为空。

解决方案

方案一:以JSON字符串格式发送数据

修改AJAX请求的data部分,用JSON.stringify()将对象转为JSON字符串:

function SendMessage(contactId, e) {
    e.preventDefault();
    var content = $("#text").val();

    const dataObject = {
        contactId: contactId,
        content: content
    }

    console.log(dataObject)

    $.ajax({
        url: "/Admin/Contact/Reply",
        type: "POST",
        data: JSON.stringify(dataObject), // 转为JSON字符串
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {
            if (res != null) {
                Swal.fire(
                    'Sent successfully!',
                    '',
                    'success'
                )
            }
        }
    })
}

后端Action需要添加[FromBody]特性来接收JSON格式的数据:

[HttpPost]
public IActionResult Reply([FromBody] ReplyModel model)
{
    // 业务逻辑处理
}

// 对应的模型类
public class ReplyModel
{
    public int ContactId { get; set; }
    public string Content { get; set; }
}

注意:模型类的属性名要和前端dataObject的键名匹配(可通过JSON序列化配置忽略大小写)。

方案二:以表单格式发送数据

如果不需要JSON格式,可移除contentType配置(jQuery默认使用application/x-www-form-urlencoded),直接传递对象:

function SendMessage(contactId, e) {
    e.preventDefault();
    var content = $("#text").val();

    const dataObject = {
        contactId: contactId,
        content: content
    }

    console.log(dataObject)

    $.ajax({
        url: "/Admin/Contact/Reply",
        type: "POST",
        data: dataObject, // jQuery自动转为表单格式
        dataType: "json",
        success: function (res) {
            if (res != null) {
                Swal.fire(
                    'Sent successfully!',
                    '',
                    'success'
                )
            }
        }
    })
}

后端Action无需[FromBody],可直接用参数或模型接收:

// 方式1:直接用参数接收
[HttpPost]
public IActionResult Reply(int contactId, string content)
{
    // 业务逻辑处理
}

// 方式2:用模型类接收
[HttpPost]
public IActionResult Reply(ReplyModel model)
{
    // 业务逻辑处理
}

额外检查点

  • 确认后端路由/Admin/Contact/Reply对应正确的控制器和Action方法。
  • 检查控制台打印的dataObject中contactId和content是否有有效值。
  • 确保后端模型类的属性名与前端键名一致,或配置JSON序列化忽略大小写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:45:17