На самом деле я пытаюсь выучить вызовы jQuery Ajax к веб-сервисам asp.Net.
Я пытался вызвать веб-метод ниже:
public class Person
{
public string FirstName { get; set; }
public string Id { get; set; }
public string LastName { get; set; }
public string Department { get; set;}
public DateTime Birthday { get; set; }
}
public class PersonWebServices : System.Web.Services.WebService {
[WebMethod]
[ScriptMethod]
public Person GetPerson(Person personToCompare)
{
return GetPerson(personToCompare.Id);
}
[WebMethod]
public Person GetPerson(string Id)
{
if (string.IsNullOrEmpty(Id))
return null;
Id = Id.Trim();
return PersonCollection.GetCachedPersonList().Find(personToCompare => personToCompare.Id == Id);
}
}
И мой JavaScript такой:
<script type="text/javascript">
function loadPerson(txtPersonId){
if(!txtPersonId.length || !(txtPersonId.val().length)){
return;
}
var ajaxCallOptions = {
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/JQuery/Chapter15-AJAX/PersonWebServices.asmx/GetPerson",
data: {FirstName:'',LastName:'', Id:txtPersonId.valueOf(),Birthday:'',Department:''},
dataType: "json",
success: function(msg){
alert('done');
},
error: function(msg){
alert('Error: '+msg.status);
}
}
jQuery.ajax(ajaxCallOptions);
};
</script>
В результате получается ответ, связанный с JSON:
{"Message": "Недопустимый примитив JSON: FirstName.", "StackTrace": "в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject () \ r \ n в System.Web.Script.Serialization..JavaScriptObjectDeserializer.DeserializeInternal (глубина Int32) \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (строковый ввод, Int32 deepLimit, сериализатор JavaScriptSerializer) \ r \ n в System.Web.Script.Serialization.JavaScriptizeerial.(Сериализатор JavaScriptSerializer, строковый ввод, тип Type, Int32 deepLimit) \ r \ n в System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T] (строковый ввод) \ r \ n в System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (контекст HttpContext, сериализатор JavaScriptSerializer) \ r \ n в System.Web.Script.Services.RestHandler.GetRawParams (метод WebServiceMethodData methodData, контекст HttpContext) \ r \ n в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (контекст HttpContext, метод WebServiceMethodData methodData), «Исключение» 1012: «Исключение».* Нужно ли каким-либо образом сериализовать мой объект перед установкой атрибута 'data', чтобы я мог вызвать функцию $ .ajax ()?
спасибо