Jquery+JSON+WebService 사용 소결

9161 단어 JqueryJSONWebService
Jquery 는 우수한 JS 프레임 워 크 로 서 간단 하고 사용 하기 쉬 운 특성 은 말 할 필요 가 없다.실제 개발 과정 에서 JQ 의 AJAX 함 수 를 사용 하여 WebService 를 호출 합 니 다.
의 인터페이스 가 AJAX 의 기능 을 실현 하 는 것 도 비교적 보편적 인 기술 수단 이 되 었 다.WebService 인터페이스의 실현 은 보통 OOP 언어 로 이 루어 진다.그래서.
WebService 의 인터페이스 함수 에 서 는 간단 한 데이터 형식 을 제외 한 복잡 한 데이터 형식 을 만 날 수 있 습 니 다.복잡 한 데이터 형식 기 는
웹 서비스 인터페이스의 매개 변 수 는 웹 서비스의 반환 값 일 수도 있 습 니 다.본문 에서 서술 한 요점 은 다음 과 같다.
1.WebService 인터페이스의 복잡 한 유형의 매개 변수 에 대해 JQ 호출 시 들 어 오 는 JSON 데 이 터 는 어떻게 표시 해 야 합 니까?
2.JQ 가 WebService 호출 에 대해 JSON 데이터 형식 을 가 져 옵 니 다.
3.JQ 호출 시 웹 서비스 가 되 돌아 오 는 복잡 한 데이터 형식 에 대해 어떤 요구 가 있 습 니까?
환경:JQ 버 전:1.4.2,VS 2008 SP1.
테스트 1:WebService 의 간단 한 매개 변수 유형:

WebService :

    [WebMethod(Description = " ")]
    public string ProcessPersonalInfo(Person person)
    {
        return person.Name + person.Tel;
    }
    JQ :

        $.ajax({

        type: "POST",

        url: "WebService1.asmx/GetString",

        dataType: "json",

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

        data: "{'name':'zhangsan'}",

        success: function(json) { alert(json.d) },

        error: function(error) {

        alert(" " + error.responseText);

        }
    });
알림:$.ajax 함수 에서 data 는 JSON 을 문자열 로 표시 해 야 하 며 JSON 데이터 로 직접 전송 할 수 없습니다.JSON 대상 과 JSON 대상 에 대한 문자열 이 있 을 수 있 습 니 다.
구분 하기 가 쉽 지 않 습 니 다.사실 문자열 은 C\#에서''로 인 한 것 과 유사 합 니 다.JSON 대상 은{}에 직접 적 혀 있 습 니 다.간단 한 테스트 방법 은 alert 함 수 를 통 해 직접 팝 업 하 는 것 입 니 다.[object:object]를 표시 하면
JSON 대상 입 니 다.그렇지 않 으 면 문자열 입 니 다.
결 과 는 다음 그림 과 같다.


테스트 2:WebService 의 복잡 한 매개 변수 유형:

WebService :

        [WebMethod(Description = " ")]
        public string ProcessPersonalInfo(Person person)
        {
            return person.Name + person.Tel;
        }

        Person :

        public class Person
        {
            public string Name { get; set; }

            public int Age { get; set; }

            public string Address { get; set; }

            public string Tel { get; set; }

        }

JQ :

        $.ajax({

            type: "POST",

            url: "WebService1.asmx/ProcessPersonalInfo",

            dataType: "json",

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

            data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}",

            success: function(json) { alert(json.d) },

            error: function(error) {

                alert(" " + error.responseText);
            }
        });
결 과 는 다음 그림 과 같다.


호출 과정 은 간단 한 매개 변수 형식 과 유사 합 니 다.JS 에서 Person 을 표시 하 는 person 대상 의 문자열 을 사용 하여 클 라 이언 트 에 보 내 면 WebService 에서 person 대상 의 문자열 을 자동 으로 보 냅 니 다.
Person 실체 대상 으로 전환 합 니 다.
테스트 3:웹 서비스 에 대한 복잡 한 반환 유형

WebService :

        [WebMethod(Description = " ")]
        public List<Person> GetPersonalList()
        {
            List<Person> persons = new List<Person>
                                    {
                                        new Person {Address = "beijing", Age = 25, Name = "zhangshan", Tel = "01082678866"}
                                    };
            return persons;
        }<BR> JQ :

            $.ajax({

            type: "POST",

            url: "WebService1.asmx/GetPersonalList",

            dataType: "json",

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

            success: function(json) { $(json.d).each(function() { alert(this.Name + "-" + this.Age + "-" + this.Address + "-" + this.Tel) }) },

            error: function(error) {

                alert(" " + error.responseText);

            }

        });
다음 그림:

복잡 한 반환 유형 에 대해 서도 처리 방식 이 간단 한 유형 은 기본적으로 같다 는 것 이다.
Jq 호출 시 WebSevice 가 JSON 을 데이터 인 터 랙 션 형식 으로 사용 할 때 데이터 형식 을 되 돌려 주 는 것 은 반드시 직렬 화 될 수 있다 는 관념 을 들 은 적 이 있다.정말 그런 가?
.Net 의 기본 데이터 형식 은 확실히 직렬 화 될 수 있다 는 점 은 의문 이 없다.그럼 List데이터 형식 을 직렬 화 할 수 있 습 니까?List의 메타 데이터(Metadata)정보 보기
그 럴 줄 알았어.
[DebuggerTypeProxy(typeof (Mscorlib_CollectionDebugView))]
[DebuggerDisplay("Count = {Count}")]
[Serializable]
public class List : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable
{
/**/
}
위의 주장 이 성립 된다 면,이런 상황 에서 호출 성공 도 크게 나 무 랄 것 이 없다.그런데 문 제 는 정말 이 렇 습 니까?다음은 계속 테스트 해 보 겠 습 니 다.
테스트 4:웹 서비스 에 대한 복잡 한 반환 유형

          [WebMethod(Description = " ")]
        public Person GetPerson()
        {
            Person person = new Person {<BR>                               Address = "beijing", Age = 27, <BR>                               Name = "zhangshan", Tel = "01082678866"                               <BR>                              };
            return person;
        }

JQ :

        $.ajax({

            type: "POST",

            url: "WebService1.asmx/GetPerson",

            dataType: "json",

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

            //data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}",

            success: function(json) { $(json.d).each(function() { alert(this.Name + "-" + this.Age + "-" + this.Address + "-" + this.Tel) }) },

            error: function(error) {

                alert(" " + error.responseText);

            }

        });
다음 그림:

그러나 테스트 4 에서 GetPerson()방법 은 Person 데이터 형식 을 되 돌려 줍 니 다.Person 실체의 정 의 를 살 펴 보면 질문 을 직렬 화 할 수 있 는 태그 가 전혀 없습니다.
결 과 를 통 해 알 수 있 듯 이 JQ 는 웹 서 비 스 를 호출 합 니 다.복잡 한 유형의 데 이 터 를 반드시 직렬 화 할 필요 가 있 는 것 은 아 닙 니 다.
다음은 재 미 있 는 테스트 를 해 보 겠 습 니 다.웹 서비스의 반환 유형 은 Hashtable 형식 이 될 수 없다 는 것 을 잘 알 고 있 습 니 다.IDictionary 인 터 페 이 스 를 실현 하기 때문이다.
테스트 5:웹 서비스의 복잡 한 반환 유형 에 대해

         [WebMethod(Description = " ")]
        public Hashtable GetPersonalHashtable()
        {
            Hashtable hashtable = new Hashtable();

            Person person = new Person { Address = "beijing", Age = 25, Name = "zhangshan", Tel = "01082678866" };

            hashtable.Add(1, person);

            return hashtable;
        }

JQ :

        $.ajax({

            type: "POST",

            url: "WebService1.asmx/GetPersonalHashtable",

            dataType: "json",

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

            data: data,

            success: function(json) { $(json.d).each(function() { alert(this["one"].Name) }) },

            error: function(error) {

                alert(" " + error.responseText);

            }

        });
 


이렇게 Jq 가 호출 에 성공 하 다 니.그 건 좀 생각 지도 못 한 일이 야.
요약:
1.Jq 와 WebService 간 에 JSON 을 데이터 교환 형식 으로 할 때 contentType:"application/json;charset=utf-8"은 반드시 지정 해 야 합 니 다.
그렇지 않 으 면 웹 서 비 스 는 어떤 데이터 로 전환 되 는 지 모른다.
2.Jq 에서 WebService 를 호출 하여 복잡 한 데이터 형식 을 되 돌려 주 는 데 반드시 형식 이 직렬 화 되 어야 하 는 것 은 아 닙 니 다.
3.WebService 에서 돌아 온 JSON 데 이 터 는"d"를 통 해 위 테스트 의 alert(json.d)와 같은 데 이 터 를 가 져 옵 니 다.

좋은 웹페이지 즐겨찾기