2010-06-19 2 views
1

사실 jpeg 웹 서비스에 대한 jQuery Ajax 호출을 배우려고합니다.이 코드에 대한 도움말 : JSON을 반환해야하는 webservice에 jQuery Ajax 호출을 작성하십시오.

나는 아래의 WebMethod 전화를 시도하고있다 :

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

} 

을 그리고 내 자바 스크립트는 이것이다 :

{ "메시지 : 말하는 JSON 관련 응답 결과

<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 프리미티브 : 이름 ","StackTrace ":"System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() \ r \ n System.Web.Script.Serialization.Java System.Web.Script.Serialization.JavaScriptSerializer.Deserialize에서 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (String input, Int32 depthLimit, JavaScriptSerializer serializer) \ Script \ System.Web.Script.Serialization.JavaScriptSerializer.Deserialize의 ScriptObjectDeserializer.DeserializeInternal (Int32 깊이) System.Web.Script.Services.RestHandler에서 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T] (문자열 입력) \ r \ n에 \ r \ n을 입력하십시오. GetRawParamsFromPostRequest (HttpContext 컨텍스트, JavaScriptSerializer serializer) \ r \ n System.Web.Script.Services.RestHandler.GetRawParams (WebServiceMethodData methodData, HttpContext 컨텍스트) \ r \ n System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext 컨텍스트 , WebServiceMethodData methodData) ","ExceptionType ":"System.ArgumentException "}

'데이터'속성을 설정하기 전에 어떤 방식 으로든 객체를 사용하므로 $ .ajax() 함수를 호출 할 수 있습니까? 오류를 바탕으로

감사

답변

2

당신의 전화에 전송 JSON 데이터에 문제가 될 것으로 보인다. 100 % 확신 할 수는 없지만 오류는 int를 deserialize하려고 시도 할 때 발생하는 것으로 보여 지므로 문제가되는 Datetime의 deserialization 또는 it 중 하나입니다. 거기에 문제가있는 이유는 둘 중 하나가 빈 문자열이거나 null/undefined 인 경우 디시리얼라이저가 값을 할당 할 수 없기 때문입니다.

Person 클래스에서 int 및 DateTime 값을 nullable (int? 및 DateTime?)으로 만들면 서비스 호출로 수신 된 데이터에 deserializer가 null 값을 할당 할 수 있습니다. 다른 옵션은 Ajax 호출로 JSON 데이터를 보내기 전에 JavaScript 측에서 유효한 기본값 (예 : 0, 1/1/1800)을 지정하는 것입니다.

+0

DateTime 속성을 제거하여 시도한 결과입니다.나는 그것이 작동하도록하는 방법에 대해 연구 할 것이다. 고마워요. 또한 stringify 제안에 대해 @patrick에게 감사드립니다. – pencilCake

+0

신난다, 내가 도울 수 있기 때문에 기쁘다. – ckramer

2

자바 스크립트 개체가 아닌 유효한 JSON 개체를 만들어야 할 가능성이 높습니다.

당신은과 같이, JSON.stringify()에 대한 호출을 통해이 작업을 수행 할 수 있습니다

data: JSON.stringify({FirstName:'',LastName:'', Id:txtPersonId.valueOf(),Birthday:'',Department:''}), 

이 설정되는 :

{FirstName:'',LastName:'', Id:txtPersonId.valueOf(),Birthday:'',Department:''} 

로 : 모든 브라우저에서 JSON을 지원

'{"FirstName":"","LastName":"","Id":"somevalue","Birthday":"","Department":""}' 

, JSON2 라이브러리를 포함해야합니다.

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

관련 문제