Нет данных, отправленных в запросе AJAX - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть код для отправки запроса AJAX, нажав на флажок информации. К сожалению, информация не отправляется. Кто-нибудь знает, где проблема?

    $.ajax({
      url: "/addletmeknow",
      type: "Post",
      data: {
        userId: "@ViewBag.UserName",
        productId: "@ViewBag.ProductID"
      },
      //data:data,
      dataType: "json",
      //contentType: 'application/json',
      contentType: "application/json;harset=utf-8",
      success: success,
      error: Error
    })
  });
});

var Error = function(e) {
  alert("error " + e.data);
}
var success = function(e) {
  alert("success " + e);
}
[HttpPost]
[Route("~/addletmeknow", Name = "AddLetMeKnow")]
public JsonResult AddLetMeKnow(string userId, string productId) 
{
  bool res = true;
  return Json(res);
}

1 Ответ

0 голосов
/ 03 сентября 2018

Если вы откроете вкладку «Ответ» запроса xhr, сделанного из вашего браузера на вкладке «Сеть» инструментов dev, вы сможете увидеть подробности исключения. Вы должны получить это исключение.

System.ArgumentException: недопустимый примитив JSON: userId

Причина, по которой вы получаете это исключение, заключается в том, что с вашим текущим кодом (даже с исправленной опечаткой) вы отправляете данные, указав значение заголовка Content-Type как "application/json" и отправляя данные в запросе. тело как userId=r&productId=34. Привязка модели, присутствующая в платформе MVC, будет считывать значение заголовка Content-Type, чтобы определить, как читать опубликованные данные, и сопоставить их с параметрами вашего метода действия. Связыватель модели хочет получить строковую версию объекта данных, когда тип содержимого указан как «application / json»

Вы можете использовать метод JSON.stringify, чтобы проверить ваш JS-объект, а также его строковую версию.

$.ajax({
    url: "/addletmeknow",
    type: "Post",
    data: JSON.stringify({
                             userId: "Shyju",
                             productId: "abc"
                         }),              
    contentType: 'application/json',
    success: success,
    error: Error
});

Поскольку отправляемая модель представляет собой плоскую модель, другой вариант - не указывать заголовок типа контента.

$.ajax({
    url: "/addletmeknow",
    type: "Post",
    data: {
             userId: "Shyju",
             productId: "abc"
          },              
    success: success,
    error: Error
});

Теперь метод jQuery ajax будет использовать application/x-www-form-urlencoded в качестве значения заголовка Content-Type, и эти данные будут отправлены как FormData (userId=r33&productId=34) в запросе xhr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...