无效的 JSON 原语:lookupID。","StackTrace":"
Invalid JSON primitive: lookupID.","StackTrace":"
我不明白为什么会出现此错误。当我在变量周围加上引号时,它实际上发送的是文本而不是变量。
{"Message":"Invalid JSON primitive: lookupID.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
我的ajax函数:
function GetVisitDates(lookupID, IsMiscellaneous) {
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: "{ 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous }",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
...
它调用的方法:
[WebMethod]
public static string GetVisitDates(int LookupID, bool isMiscellaneous)
我相信引号会把它扔掉。
我会先将 JSON 放入它自己的变量中:
function GetVisitDates(lookupID, IsMiscellaneous) {
var data = {
"LookupID" : lookupID,
"isMiscellaneous" : isMiscellaneous
};
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
...
或者,这可能有效,但我不确定:
data: { 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous },
编辑:Steven Bryne 是正确答案。您要添加 JSON.stringify()。
我也更新了我的答案。
另见:Invalid JSON primitive ERROR
您需要先 JSON.stringify()
发送数据 - 不幸的是 .aspx
WebMethods 对它们如何绑定参数非常挑剔:)
如果您使用浏览器的 F12 工具查看实际的 POST
请求,您将看到您的代码当前发送的负载如下:
LookupID=20&isMiscellaneous=true
然而,为了使其正确绑定,它需要是实际的 JSON,如下所示:
{LookupID: 20, isMiscellaneous: true}
这就是 JSON.stringify
的用武之地。
这是我用来复制并确认这解决了问题的代码:
在 Home.aspx.cs 中:
public partial class Home : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string GetVisitDates(int LookupID, bool isMiscellaneous)
{
return string.Format("{0}-{1}", LookupID, isMiscellaneous);
}
}
在客户端(在我的例子中只是 Home.aspx 中的一个脚本):
$(document).ready(function() {
GetVisitDates(20, true);
});
function GetVisitDates(lookupID, isMiscellaneous) {
var data = {
"LookupID": lookupID,
"isMiscellaneous": isMiscellaneous
};
data = JSON.stringify(data);
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(data) {
console.log(data);
},
error: function(xhr) {
console.log(xhr);
}
}
);
}
最后,here 是一个非常适合将 ajax 与 Webforms 结合使用的参考...希望对您有所帮助!
我不明白为什么会出现此错误。当我在变量周围加上引号时,它实际上发送的是文本而不是变量。
{"Message":"Invalid JSON primitive: lookupID.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
我的ajax函数:
function GetVisitDates(lookupID, IsMiscellaneous) {
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: "{ 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous }",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
...
它调用的方法:
[WebMethod]
public static string GetVisitDates(int LookupID, bool isMiscellaneous)
我相信引号会把它扔掉。
我会先将 JSON 放入它自己的变量中:
function GetVisitDates(lookupID, IsMiscellaneous) {
var data = {
"LookupID" : lookupID,
"isMiscellaneous" : isMiscellaneous
};
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
...
或者,这可能有效,但我不确定:
data: { 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous },
编辑:Steven Bryne 是正确答案。您要添加 JSON.stringify()。 我也更新了我的答案。
另见:Invalid JSON primitive ERROR
您需要先 JSON.stringify()
发送数据 - 不幸的是 .aspx
WebMethods 对它们如何绑定参数非常挑剔:)
如果您使用浏览器的 F12 工具查看实际的 POST
请求,您将看到您的代码当前发送的负载如下:
LookupID=20&isMiscellaneous=true
然而,为了使其正确绑定,它需要是实际的 JSON,如下所示:
{LookupID: 20, isMiscellaneous: true}
这就是 JSON.stringify
的用武之地。
这是我用来复制并确认这解决了问题的代码:
在 Home.aspx.cs 中:
public partial class Home : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string GetVisitDates(int LookupID, bool isMiscellaneous)
{
return string.Format("{0}-{1}", LookupID, isMiscellaneous);
}
}
在客户端(在我的例子中只是 Home.aspx 中的一个脚本):
$(document).ready(function() {
GetVisitDates(20, true);
});
function GetVisitDates(lookupID, isMiscellaneous) {
var data = {
"LookupID": lookupID,
"isMiscellaneous": isMiscellaneous
};
data = JSON.stringify(data);
$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(data) {
console.log(data);
},
error: function(xhr) {
console.log(xhr);
}
}
);
}
最后,here 是一个非常适合将 ajax 与 Webforms 结合使用的参考...希望对您有所帮助!