$.ajax()방법 으로 서버 에서 json 데 이 터 를 가 져 오 는 몇 가지 방법 을 요약 합 니 다.

18620 단어 $.ajax서버획득json
뭐 공부 해요?
json 은 xml 를 대체 하 는 데이터 구조 로 xml 에 비해 작 지만 설명 능력 이 강하 고 네트워크 전송 데이터 의 사용 유량 이 적 으 며 속도 가 빠르다.
json 은 다음 기호 로 표 시 된 문자열 입 니 다.
{키 쌍}:json 대상
[{},{},{}]:json 배열
"":작은 따옴표 안에 속성 이나 값 이 있 습 니 다.
::사칭 전 키,후 값(이 값 은 기본 데이터 형식의 값 일 수도 있 고 배열 이나 대상 일 수도 있 습 니 다)이기 때문에{"age":18}은 age 를 18 로 포함 하 는 json 대상 으로 이해 할 수 있 습 니 다.[{"age":18},{"age":20}]는 두 대상 을 포함 하 는 json 배열 을 표시 합 니 다.{"age":[18,20]}을 사용 하여 위의 json 배열 을 간소화 할 수 있 습 니 다.이것 은 age 배열 을 가 진 대상 입 니 다.
2.$.ajax()방법 에서 dataType 속성의 값 을 추출 합 니 다.
$.aajax()방법 에서 dataType 속성 은 String 형식의 매개 변 수 를 요구 합 니 다.서버 가 되 돌아 올 것 으로 예상 되 는 데이터 형식 입 니 다.지정 하지 않 으 면 JQuery 는 http 패키지 mime 정보 에 따라 responseXML 또는 responseText[세 번 째 부분 에서 설명]를 자동 으로 되 돌려 주 고 리 셋 함수 매개 변수 로 전달 합 니 다.사용 가능 한 종 류 는 다음 과 같 습 니 다:
xml:XML 문 서 를 되 돌려 줍 니 다.JQuery 로 처리 할 수 있 습 니 다.
html:텍스트 HTML 정 보 를 되 돌려 줍 니 다.포 함 된 script 탭 은 DOM 을 삽입 할 때 실 행 됩 니 다.
script:텍스트 자 바스 크 립 트 코드 를 되 돌려 줍 니 다.결 과 를 자동 으로 캐 시 하지 않 습 니 다.cache 인 자 를 설정 하지 않 는 한원 격 요청 시(같은 필드 에 있 지 않 음)모든 post 요청 이 get 요청 으로 전 환 됩 니 다.
json:JSON 데 이 터 를 되 돌려 줍 니 다.
jsonp:JSONP 형식 입 니 다.SONP 형식 으로 함 수 를 호출 할 때,예 를 들 어 myurl?callback=?,JQuery 는 다음"?"를 자동 으로 바 꿉 니 다.정확 한 함수 명 을 위해 리 셋 함 수 를 실행 합 니 다.
3.Mime 데이터 형식 및 response 의 set ContentType()방법
MIME 타 입 이 뭐 예요?출력 결 과 를 브 라 우 저 에 전송 할 때 브 라 우 저 는 출력 문 서 를 처리 하기 위해 적당 한 프로그램 을 시작 해 야 합 니 다.다양한 유형의 MIME(다기 능 인터넷 메 일 확장 프로 토 콜)를 통 해 완성 할 수 있다.HTTP 에서 MIME 형식 은 Content-type header 에 정의 되 어 있 습 니 다.
예 를 들 어 클 라 이언 트 에 Microsoft Excel 파일 을 전송 하려 고 설정 합 니 다.그렇다면 이때 의 MIME 유형 은'응용 프로그램/vnd.ms-excel'이다.대부분의 실제 상황 에서 이 파일 은 Execl 에 전송 되 어 처 리 됩 니 다.자바 에서 MIME 종 류 를 설정 하 는 방법 은 Response 대상 을 통한 ContentType 속성 입 니 다.예 를 들 어 상용:response.setContentType("text/html;charset=UTF-8")을 설정 합 니 다.
최초의 HTTP 프로 토 콜 에는 추가 적 인 데이터 형식 정보 가 없 었 고 모든 전송 데 이 터 는 클 라 이언 트 프로그램 에 의 해 하이퍼텍스트 표기 언어 인 HTML 문서 로 해석 되 었 으 며 멀티미디어 데이터 형식 을 지원 하기 위해 HTTP 프로 토 콜 에 서 는 문서 앞 에 추 가 된 MIME 데이터 형식 메 시 지 를 사용 하여 데이터 형식 을 표시 했다.
각 MIME 유형 은 두 부분 으로 구성 되 어 있 으 며 앞 에는 데이터 의 큰 유형,예 를 들 어 텍스트 text,이미지 이미지 이미지 등 이 있 고 뒤에 구체 적 인 종 류 를 정의 합 니 다.
일반적인 MIME 종류:
하이퍼텍스트 태그 언어 텍스트.html,.html text/html
일반 텍스트.txt text/plain
RTF 텍스트.rtf 응용 프로그램/rtf
GIF 도형.gif image/gif
JPEG 도형.ipeg,.jpg image/jpeg
au 사 운 드 파일.au audio/basic
MIDI 음악 파일 mid,.midi audio/midi,audio/x-midi
RealAudio 음악 파일.ra,.ram audio/x-pn-realaudio
MPEG 파일.MPG,.MPEG 비디오/MPEG
AVI 파일.avi 비디오/x-msvideo
GZIP 파일.gz 응용 프로그램/x-gzip
TAR 파일.tar 응용 프로그램/x-tar
클 라 이언 트 프로그램 이 서버 에서 데 이 터 를 받 을 때 서버 에서 데이터 흐름 만 받 을 뿐 문서 의 이름 을 알 지 못 하기 때문에 서버 는 추가 정 보 를 사용 하여 클 라 이언 트 프로그램 데이터 의 MIME 형식 을 알려 야 합 니 다.
서버 는 실제 데 이 터 를 보 내기 전에 로고 데이터 의 MIME 형식의 정 보 를 먼저 보 내야 한다.이 정 보 는 Content-type 키 워드 를 사용 하여 정의 한다.예 를 들 어 HTML 문서 에 대해 서버 는 먼저 다음 두 줄 의 MIME 표지 정 보 를 보 낼 것 이다.이 표 지 는 실제 데이터 파일 의 일부분 이 아니다.
Content-type: text/html
두 번 째 행 위 는 빈 줄 입 니 다.이것 은 필수 적 입 니 다.이 빈 줄 을 사용 하 는 목적 은 MIME 정보 와 실제 데이터 내용 을 분리 하 는 것 입 니 다.
앞에서 말 한 바 와 같이 자바 에서 MIME 형식 을 설정 하 는 방법 은 Response 대상 의 ContentType 속성 을 통 해 설정 하 는 것 입 니 다.설정 하 는 방법 은 response.setContentType(MIME)문 구 를 사용 하 는 것 입 니 다.response.setContentType(MIME)의 역할 은 클 라 이언 트 브 라 우 저 를 다양한 종류의 데 이 터 를 구분 하 는 것 입 니 다.또한 서로 다른 MIME 호출 브 라 우 저 에 있 는 프로그램 삽입 모듈 에 따라 해당 하 는 데 이 터 를 처리 합 니 다.
Tomcat 의 설치 디 렉 터 리\conf\웹.xml 에서 대량의 MIME 형식 을 정 의 했 습 니 다.참고 하 실 수 있 습 니 다.예 를 들 어 설정 할 수 있 습 니 다:
response.setContentType("text/html; charset=utf-8"); html
response.setContentType("text/plain; charset=utf-8"); 텍스트
응용 프로그램/json json 데이터
이 방법 은 클 라 이언 트 에 보 내 는 응답 내용 형식 을 설정 합 니 다.이 때 응답 이 제출 되 지 않 았 습 니 다.제 시 된 내용 형식 은 문자 인 코딩 설명 을 포함 할 수 있 습 니 다.예 를 들 어 text/html;charset=UTF-8。이 방법 이 getWriter()방법 이 호출 되 기 전에 호출 되면 응답 하 는 문자 인 코딩 은 제 시 된 내용 형식 에서 만 설 정 됩 니 다.이 방법 은 getWriter()방법 이 호출 되 거나 제출 된 후에 호출 되면 응답 하 는 문자 인 코딩 을 설정 하지 않 습 니 다.http 프로 토 콜 을 사용 하 는 경우 이 방법 은 Content-type 실체 헤더 를 설정 합 니 다.
4.$.ajax()방법 으로 json 데 이 터 를 얻 는 세 가지 방법
dataType 매개 변수 설정 은 jquery 가 서버 가 돌아 오 는 데 이 터 를 자동 으로 분석 하 는 데 도움 을 주 는 방법 을 결정 합 니 다.배경 에서 돌아 오 는 json 문자열 을 얻 고 json 대상 으로 해석 할 수 있 는 몇 가지 방법 이 있 습 니 다.다음은 자바 의 예 로 설명 합 니 다.아래 3 중 방식 의 결 과 는 모두 그림 1 과 같 습 니 다.항목 은 내부 네트워크 에서 실행 되 고 캡 처 할 수 없 으 며 사진 만 찍 을 수 있 습 니 다.양해 해 주 십시오.

1.$.ajax()매개 변수 에 dataType 을 설정 하지 않 고 배경 response 도 반환 형식 을 설정 하지 않 으 면 기본 값 은 일반 텍스트 로 처리 합 니 다[response.setContentType("text/html;").charset=utf-8");또한 텍스트 처리 로 서 js 에 서 는 eval()이나$.parseJSON()등 을 수 동 으로 사용 하여 되 돌아 오 는 문자열 을 json 대상 으로 변환 해 야 합 니 다.

//Java  :                   
	public void getHistorySingleData() throws IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.setContentType("text/html;charset=utf-8");
		String deviceName = request.getParameter("deviceName");
		String startDate= request.getParameter("startDate");
		String endDate = request.getParameter("endDate");
		SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);
		System.out.println(singleHistoryData.length);
		System.out.println(JSONArray.fromObject(singleHistoryData).toString());//  :[{"time":"2016-11-11 10:00:00","state":"  ","ball":"  ",....},{"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....},{},{}....]    singleHistoryData            {"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....}
		response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());
	}

	/*js  :            ,          */
 $("#search").click(function () {
 	var data1 = [];
 	var n;
 	var deviceName=$("body").attr("id"); 
  var startDate = $("#startDate").val();
  var endDate = $("#endDate").val();
  $.ajax({
   url:"/avvii/chart/getHistorySingleData",
   type:"post",
   data:{
    "deviceName":deviceName,
    "startDate": startDate,
    "endDate": endDate
   },
   success: function (data) {
  	 alert(data);//---->  [{"time":"2016-11-11 10:00:00","state":"  ","ball":"  ",....},{"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....},{},{}....],       singleHistoryData            {"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....}
 		 alert(Object.prototype.toString.call(data)); //--->  [object String],      String     
  	 var JsonObjs = eval("(" + data + ")");  //  :var JsonObjs = $.parseJSON(data);
 		 alert(JsonObjs);//alert(JsonObjs);---->  [object Object],[object Object],[object Object][object Object],[object Object],[object Object]……       singleHistoryData       [object Object]
    n=JsonObjs.length;
    if(n==0){
   	 alert("          ,     ");
    }
 		 for(var i = 0; i < JsonObjs.length; i++){	      
		  	  var name = JsonObjs[i]['time'];//       :JsonObjs[i],  :JsonObjs[i].time
		 	  var state = JsonObjs[i]['state'];
		 	  var ball = JsonObjs[i]['ball'];
		 	  var xd = JsonObjs[i]['xd'];
		 	  var yd = JsonObjs[i]['yd'];
		 	  var zd = JsonObjs[i]['zd'];
		 	  var xf = JsonObjs[i]['xf'];
		 	  var yf = JsonObjs[i]['yf'];
		 	  var zf = JsonObjs[i]['zf'];
      data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};//               ,                
    }
 		 if(JsonObjs.length != 10){
 			 for(var j=0;j<(10-((JsonObjs.length)%10));j++){    //          ,          
 				 data1[j+JsonObjs.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; 
 			 }
 		 }
    var userOptions = {
      "id":"kingTable",        				//     id
      "head":["  ","    ","    ","X   /mm","Y   /mm","Z   /mm","X    /Kg","Y    /Kg","Z    /Kg"], //   thead  
      "body":data1,         				//   tbody          
      "foot":true,         					// true/false     tfoot ---   false
      "displayNum": 10,        					//      10       
      "groupDataNum":6,        					//      10   
      sort:false,         					//          true/false ---   false
      search:false,         					//    false     
      lang:{
       gopageButtonSearchText:"  "
      }
    }
    var cs = new KingTable(null,userOptions);
   }
  }); 
 });
2.$.ajax()매개 변수 에 dataType="json"을 설정 하면 jquery 는 자동 으로 돌아 오 는 문자열 을 json 대상 으로 바 꿉 니 다.배경 은 response.setContentType("text/html;")으로 설정 할 수 있 습 니 다.charset=utf-8");또는 response.setContentType("application/json;charset=utf-8");

	//Java  :                   
	public void getHistorySingleData() throws IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.setContentType("text/html;charset=utf-8");
		String deviceName = request.getParameter("deviceName");
		String startDate= request.getParameter("startDate");
		String endDate = request.getParameter("endDate");
		SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);
		System.out.println(singleHistoryData.length);
		System.out.println(JSONArray.fromObject(singleHistoryData).toString());//  :[{"time":"2016-11-11 10:00:00","state":"  ","ball":"  ",....},{"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....},{},{}....]    singleHistoryData            {"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....}
		response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());
	}

/*js  :       ,          */ 
	var data1 = [];
	var deviceName=$("body").attr("id"); 
 var startDate = $("#startDate").val("2000-01-01 00:00:00");
 var endDate = $("#endDate").val("2018-01-01 00:00:00");
 $.ajax({
  url:"/avvii/chart/getHistorySingleData",
  type:"post",
  data:{
   "deviceName":deviceName,
   "startDate": "2000-01-01 00:00:00",
   "endDate": "2018-01-01 00:00:00"
  },
  dataType:"json",
  success: function (data) {
 	 alert(data);//---->  [object Object],[object Object],[object Object][object Object],[object Object],[object Object]……       singleHistoryData       json  :[object Object]
   for(var i = 0; i < data.length; i++){	      
	  	  var name = data[i]['time'];
	 	  var state = data[i]['state'];
	 	  var ball = data[i]['ball'];
	 	  var xd = data[i]['xd'];
	 	  var yd = data[i]['yd'];
	 	  var zd = data[i]['zd'];
	 	  var xf = data[i]['xf'];
	 	  var yf = data[i]['yf'];
	 	  var zf = data[i]['zf'];
     data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};
   }
		 if(data.length != 10){
			 for(var j=0;j<(10-((data.length)%10));j++){    //          ,          
				 data1[j+data.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; 
			 }
		 }
   var userOptions = {
     "id":"kingTable",        				//     id
     "head":["  ","    ","    ","X   /mm","Y   /mm","Z   /mm","X    /Kg","Y    /Kg","Z    /Kg"], //   thead  
     "body":data1,         				//   tbody          
     "foot":true,         					// true/false     tfoot ---   false
     "displayNum": 10,        					//      10       
     "groupDataNum":6,        					//      10   
     sort:false,         					//          true/false ---   false
     search:false,         					//    false     
     lang:{
      gopageButtonSearchText:"  "
     }
   }
   var cs = new KingTable(null,userOptions);
  }
 }); 
3.ajax 방법 매개 변수 에 dataType 을 지정 하지 않 고 배경 설정 반환 형식 은'application/json'입 니 다.이렇게 하면 jquery 는 mime 유형 에 따라 스마트 하 게 판단 하고 json 대상 으로 자동 으로 해석 된다.

	//Java  :                   
	public void getHistorySingleData() throws IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.setContentType("application/json;charset=utf-8");
		String deviceName = request.getParameter("deviceName");
		String startDate= request.getParameter("startDate");
		String endDate = request.getParameter("endDate");
		SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);
		System.out.println(singleHistoryData.length);
		System.out.println(JSONArray.fromObject(singleHistoryData).toString());//  :[{"time":"2016-11-11 10:00:00","state":"  ","ball":"  ",....},{"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....},{},{}....]    singleHistoryData            {"time":"2016-11-11 10:00:05","state":"  ","ball":"  ",....}
		response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());
	}

 /*js  :       ,          */ 
	var data1 = [];
	var deviceName=$("body").attr("id"); 
 var startDate = $("#startDate").val("2000-01-01 00:00:00");
 var endDate = $("#endDate").val("2018-01-01 00:00:00");
 $.ajax({
  url:"/avvii/chart/getHistorySingleData",
  type:"post",
  data:{
   "deviceName":deviceName,
   "startDate": "2000-01-01 00:00:00",
   "endDate": "2018-01-01 00:00:00"
  },
  success: function (data) {
 	 alert(data);//---->  [object Object],[object Object],[object Object][object Object],[object Object],[object Object]……       singleHistoryData       json  :[object Object]
   for(var i = 0; i < data.length; i++){	      
	  	  var name = data[i]['time'];
	 	  var state = data[i]['state'];
	 	  var ball = data[i]['ball'];
	 	  var xd = data[i]['xd'];
	 	  var yd = data[i]['yd'];
	 	  var zd = data[i]['zd'];
	 	  var xf = data[i]['xf'];
	 	  var yf = data[i]['yf'];
	 	  var zf = data[i]['zf'];
     data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};
   }
		 if(data.length != 10){
			 for(var j=0;j<(10-((data.length)%10));j++){    //          ,          
				 data1[j+data.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; 
			 }
		 }
   var userOptions = {
     "id":"kingTable",        				//     id
     "head":["  ","    ","    ","X   /mm","Y   /mm","Z   /mm","X    /Kg","Y    /Kg","Z    /Kg"], //   thead  
     "body":data1,         				//   tbody          
     "foot":true,         					// true/false     tfoot ---   false
     "displayNum": 10,        					//      10       
     "groupDataNum":6,        					//      10   
     sort:false,         					//          true/false ---   false
     search:false,         					//    false     
     lang:{
      gopageButtonSearchText:"  "
     }
   }
   var cs = new KingTable(null,userOptions);
  }
 }); 
메모:프론트 데스크 나 백 스테이지 에 json 대상 으로 돌아 가 는 설정 이 있 으 면 eval()방법 이나$.parseJSON()방법 으로 해석 하지 않 아 도 됩 니 다.다시 분석 하면 오류 가 발생 합 니 다.
결론:상기 몇 가지 방식 은 두 번 째 방식 을 추천 합 니 다.편리 하고 실수 하기 쉽 지 않 습 니 다.
5.eval()방법
var json 대상=eval('+json 데이터+')';대괄호 로 묶 인 내용 이 eval()에 의 해 실 행 된 후 되 돌아 오 는 것 은 JSON 대상 입 니 다.
eval 함수 의 작업 원리:eval 함 수 는 자바 스 크 립 트 코드 가 포 함 된 문자열 을 평가 하고 문자열 에 포 함 된 표현 식 이나 일련의 합 법 적 인 자바 스 크 립 트 문 구 를 실행 하려 고 합 니 다.eval 함 수 는 마지막 표현 식 이나 문장 에 포 함 된 값 이나 인용 을 반환 값 으로 합 니 다.
eval 에"("+data+")"를 추가 하 는 이 유 는 무엇 입 니까?/"네?
이 유 는 eval 자체 의 문제 때문이다.json 은'{}'방식 으로 시작 하고 끝 납 니 다.JS 에 서 는 하나의 구문 블록 으로 처리 되 기 때문에 표현 식 으로 강제 적 으로 변환 해 야 합 니 다.괄호 를 붙 이 는 목적 은 eval 함수 가 자 바스 크 립 트 코드 를 처리 할 때 괄호 안의 표현 식(expression)을 문장(statement)이 아 닌 대상 으로 강제로 전환 하도록 하 는 것 이다.예 를 들 어 대상 글자 의 양{},외부 괄호 를 넣 지 않 으 면 eval 은 큰 괄호 를 자바 스 크 립 트 코드 블록 의 시작 과 끝 표시 로 인식 합 니 다.{}은 빈 문 구 를 실행 한 것 으로 여 겨 집 니 다.이상 의 이 편 은$.ajax()방법 을 바탕 으로 서버 에서 json 데 이 터 를 얻 는 몇 가지 방식 으로 요약 하면 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기