繁体   English   中英

如何从Ajax调用获取数据到MVC控制器?

[英]How to get data from ajax call to MVC controller?

我在MVC控制器中有一个查询数据库并返回JSON对象的方法。 它需要一个ajax调用来给它一个查询数据库的日期,但是,在我当前的设置中,我将null传递给了控制器。

这是我的ajax请求:

$(document).ready(function () {
        setInterval(function () {
            $.ajax({
                type: "POST",
                url: '@Url.Action("GetChartData", "Plot")',
                dataType: 'json',
                data: '04-15-2019 15:49:00',
                success: function (result) {
                    console.log(JSON.parse(result)
                }
            });
        }, 10000)

这是我的控制器:

 [HttpPost]
 public JsonResult GetChartData(string timeStamp)
 {
        string output = queryDatabase(timeStamp);
        string test = new JavaScriptSerializer().Serialize(output);
        return Json(output, JsonRequestBehavior.AllowGet);
 }

现在,当我在queryDatabase调用之后放置一个断点时, timeStamp变量为null ,我在做什么错呢?

谢谢!

添加[FromBody] -attribute强制控制器从请求主体读取简单类型:

 using System.Web.Http;
 [HttpPost]
 public JsonResult GetChartData([FromBody]string timeStamp)
 {
        string output = queryDatabase(timeStamp);
        string test = new JavaScriptSerializer().Serialize(output);
        return Json(output, JsonRequestBehavior.AllowGet);
 }

试试这个

$(document).ready(function () {
    setInterval(function () {
        $.ajax({
            type: "POST",
            url: '@Url.Action("GetChartData", "Plot")',
            dataType: 'json',
            data: {timeStamp: '04-15-2019 15:49:00'},
            success: function (result) {
                console.log(JSON.parse(result)
            }
        });
    }, 10000)
});

并在控制器中:

[HttpPost]
public JsonResult GetChartData()
{
    var timeStamp = Request["timeStamp"];
    var output = queryDatabase(timeStamp);
    var test = new JavaScriptSerializer().Serialize(output);
    return Json(output, JsonRequestBehavior.AllowGet);
}

当您在Ajax调用上使用Post type和dataType JSON ,您需要以{title:data}格式传递数据,这种情况下

$(document).ready(function () {
    setInterval(function () {
        $.ajax({
            type: "POST",
            url: '@Url.Action("GetChartData", "Plot")',
            dataType: 'json',
            data: {timeStamp: '04-15-2019 15:49:00'},
            success: function (result) {
                console.log(JSON.parse(result)
            }
        });
    }, 10000)

在您的控制器中,它将自动捕获参数中的数据。 仅在Ajax调用中仔细检查了您的URL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM