我无法弄清楚为什么会收到此错误。当我在变量周围加上引号时,它实际上是发送文本而不是变量。
{"消息":"无效的JSON原语:lookupID。"," StackTrace":" System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary上的System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\ r \ n中的System.Web。 (Int32深度)\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度)\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String输入,Int32 depthLimit,JavaScriptSerializer序列化程序) \ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit)\ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String)输入)\ r \ n System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context,JavaScriptSerializer serializer)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMe) thodData methodData,HttpContext context)\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)"," ExceptionType":" System.ArgumentException& #34;}
我的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)
答案 0 :(得分:3)
在发送数据之前,您需要先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是一个非常适合在Webforms上使用ajax的参考...希望有所帮助!
答案 1 :(得分:0)
我相信引号会把它扔掉。
我首先将JSON放入自己的变量中:
NON-NULL
或者,这可能有用,但并不完全确定:
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,
...
编辑:Steven Bryne是正确的答案。您想要添加JSON.stringify()。
我也更新了我的答案。