Ajax处理中的“无效的JSON原语”

我在jQuery的ajax调用中遇到错误。

这是我的jQuery函数:

function DeleteItem(RecordId, UId, XmlName, ItemType, UserProfileId) {

var obj = {

RecordId: RecordId,

UserId: UId,

UserProfileId: UserProfileId,

ItemType: ItemType,

FileName: XmlName

};

var json = Sys.Serialization.JavaScriptSerializer.serialize(obj);

$.ajax({

type: "POST",

url: "EditUserProfile.aspx/DeleteRecord",

data: json,

contentType: "application/json; charset=utf-8",

dataType: "json",

async: true,

cache: false,

success: function(msg) {

if (msg.d != null) {

RefreshData(ItemType, msg.d);

}

},

error: function(XMLHttpRequest, textStatus, errorThrown) {

alert("error occured during deleting");

}

});

}

这是我的WebMethod

[WebMethod]

public static string DeleteRecord(Int64 RecordId, Int64 UserId, Int64 UserProfileId, string ItemType, string FileName) {

try {

string FilePath = HttpContext.Current.Server.MapPath(FileName);

XDocument xmldoc = XDocument.Load(FilePath);

XElement Xelm = xmldoc.Element("UserProfile");

XElement parentElement = Xelm.XPathSelectElement(ItemType + "/Fields");

(from BO in parentElement.Descendants("Record")

where BO.Element("Id").Attribute("value").Value == RecordId.ToString()

select BO).Remove();

XDocument xdoc = XDocument.Parse(Xelm.ToString(), LoadOptions.PreserveWhitespace);

xdoc.Save(FilePath);

UserInfoHandler obj = new UserInfoHandler();

return obj.GetHTML(UserId, UserProfileId, FileName, ItemType, RecordId, Xelm).ToString();

} catch (Exception ex) {

HandleException.LogError(ex, "EditUserProfile.aspx", "DeleteRecord");

}

return "success";

}

有人可以告诉我我的代码有什么问题吗?

我收到此错误:

{

"Message":"Invalid JSON primitive: RecordId.",

"StackTrace":"

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)

at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)

at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)

at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)

at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)

at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)",

"ExceptionType":"System.ArgumentException"

}

回答:

只是猜测变量json之后包含什么

var json = Sys.Serialization.JavaScriptSerializer.serialize(obj);?

如果它是一个有效的json对象,{'foo':'foovalue',

'bar':'barvalue'}那么jQuery可能不会将其作为json数据发送,而是将其序列化为,foor=foovalue&bar=barvalue因此您会收到错误消息"Invalid

JSON primitive: foo"

尝试改为将数据设置为字符串

$.ajax({

...

data: "{'foo':'foovalue', 'bar':'barvalue'}", //note the additional quotation marks

...

})

这样,jQuery应该不理会数据并将字符串原样发送到服务器,这应允许ASP.NET解析json服务器端。

以上是 Ajax处理中的“无效的JSON原语” 的全部内容, 来源链接: utcz.com/qa/408485.html

回到顶部