我在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
,我在做什么错了?
谢谢!
答案 0 :(得分:1)
添加[FromBody]
属性以强制控制器从请求正文中读取简单类型:
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);
}
答案 1 :(得分:1)
尝试这样的事情
$(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);
}
答案 2 :(得分:1)
在Ajax调用中使用Uncaught exception:
Cannot read property 'length' of undefined
类型和dataType Post
时,您需要以这种格式JSON
传递数据
{title:data}
在您的控制器中,它将自动捕获参数中的数据。只需在Ajax调用中仔细检查您的URL