AJAX请求中未发送任何数据

时间:2018-09-03 15:12:43

标签: jquery ajax asp.net-mvc

我有通过单击信息复选框来发出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 :(得分:0)

如果您在开发工具的“网络”标签中选中了从浏览器发出的xhr请求的“响应”标签,则可以看到异常详细信息。您一定会遇到此异常。

  

System.ArgumentException:无效的JSON原语:userId

出现此异常的原因是,在当前代码(即使输入错误已固定的情况下)下,您正在发送数据,同时将Content-Type标头值指定为“ application/json”并发送请求正文中的数据为userId=r&productId=34。 MVC框架中存在的Model绑定器将读取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标头值,并且此数据将在xhr请求中作为FormData(userId=r33&productId=34)发送。