Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Invalid JSON primitive" in Ajax processing

I am getting an error in an ajax call from jQuery.

Here is my jQuery function:

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");         }     }); } 

and this is my 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"; } 

Can anybody please tell me what's wrong in my code?

I am getting this error:

{     "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" } 
like image 860
Radhi Avatar asked Mar 15 '10 08:03

Radhi


People also ask

What is JSON primitive?

JSON can represent (sub)values of four primitive data types and of two compound data types. The primitive data types are string, number, boolean, and null. There is no way to declare the data type of a JSON value; rather, it emerges from the syntax of the representation.


1 Answers

Just a guess what does the variable json contain after

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

If it is a valid json object like {"foo":"foovalue", "bar":"barvalue"} then jQuery might not send it as json data but instead serialize it to foor=foovalue&bar=barvalue thus you get the error "Invalid JSON primitive: foo"

Try instead setting the data as string

$.ajax({     ...     data: '{"foo":"foovalue", "bar":"barvalue"}', //note the additional quotation marks     ... }) 

This way jQuery should leave the data alone and send the string as is to the server which should allow ASP.NET to parse the json server side.

like image 125
jitter Avatar answered Sep 22 '22 10:09

jitter