消息:无效的JSON原语:使用Webmethod的ajax jquery方法

Nes*_*r C 19 c# asp.net jquery asp.net-ajax

我使用数据值作为对象文字,而不是连接一个字符串,如本答案中所述

我的代码如下:

$.ajax({    
  url: "../Member/Home.aspx/SaveClient",
  type: "POST",
  async: false,
  dataType: 'json',
  contentType: 'application/json; charset=utf-8',
  data: {
    "projectSoid": ProjectId,
    "startDate": StartDate,
    "endDate": EndDate,
    "clientManager": ClientManager
  },
  success: function(response) {
    if (response.d != "") {

    }
  },
  error: function(response) {
    var r = jQuery.parseJSON(response.responseText);
    alert("Message: " + r.Message);
    alert("StackTrace: " + r.StackTrace);
    alert("ExceptionType: " + r.ExceptionType);
  }
})
Run Code Online (Sandbox Code Playgroud)

我的网络方法是这样的:

[WebMethod]
public static string SaveClient(string projectSoid, string startDate, 
     string endDate, string clientManager)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

消息:无效的JSON原语:projectSoid

nem*_*esv 39

有了你,contentType: 'application/json; charset=utf-8'你声称你将发送JSON,但目前你的data财产没有持有JSON.

您需要data使用以下JSON.stringify方法将您转换为JSON :

所以将您的data财产改为:

data: JSON.stringify({
    "projectSoid": ProjectId,
    "startDate": StartDate,
    "endDate": EndDate,
    "clientManager": ClientManager
}),
Run Code Online (Sandbox Code Playgroud)

您应该注意,JSON.stringify旧版浏览器本身不支持该方法,因此您可能需要提供使用以下各种库之一的实现:

Douglas Crockford的JSON2库.

  • 如果您不想使用JSON.stringify,则可以删除内容类型.默认情况下,内容类型为application/x-www-form-urlencoded; charset = UTF-8(见http://api.jquery.com/jquery.ajax/).我更喜欢使用JSON.stringify,就像@nemesv指出的那样,但我只是想说它不是强制性的. (3认同)