Как получить данные от вызова ajax к контроллеру MVC? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть метод в контроллере 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, что я делаю не так?

Спасибо!

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Попробуйте что-то вроде этого

$(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);
}
1 голос
/ 16 апреля 2019

Когда вы используете Post type и dataType JSON при вызове Ajax, вам нужно передать данные в этом формате {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)

В вашем контроллере он будет автоматически перехватывать данные в качестве аргумента. При условии, что вы дважды проверите URL в вызове Ajax

1 голос
/ 16 апреля 2019

Добавить [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);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...