ajax 배열 전송 문제 해결 - json 배열 ajax로 사용하기

728x90

 

주식의 Symbol값을 사용해서 특정 날짜의 시가, 종가, 고가, 저가, 날짜, 거래량을 사용하는 예제

 

문제점은 이 망할 json 데이터가 이클립스까지는 출력이되는데 JS로 넘어가는 순간 값이 "empty" : false가 되버리는 것

 

해결책은 Controller에서 String으로 반환한다음 ajax에서 text로 받고, ajax내부에서 JSON.parse()로 ㅅㄷtext데이터를 JSON 데이터로 다시 묶어주니 해결됬다.

내 소중한 1시간 반 굿바이...

 

아래는 예제 코드

 

JS

            $.ajax({
                // data:objtext,
                dataType:'text',
                method:"post",
                caches:false,
                url:"/sDiary/Symbol?" + "Symbol= " + $('#Symbol').val(),
                success:function(jobj){
					var test = JSON.parse(jobj);
                    console.log(test[0].High);
                    
                },
                error:function(error,status,xhr){
                    alert("검색하신 종목이 존재하지 않습니다 :(");
                }
            });

 

Service

	public JSONArray getstockChart(String symbol) {
		
		List<sdiaryVO> list = sdiaryMapper.getchart(symbol.strip());
		
		JSONArray jarr = new JSONArray();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		try {
			for(int i = 0; i<list.size(); i++) {
				sdiaryVO vo = list.get(i);
//				중복값 방지
				JSONObject obj = new JSONObject();
				obj.put("Open", Float.valueOf(vo.getOpen()));
				obj.put("High", Float.valueOf(vo.getHigh()));
				obj.put("Low", Float.valueOf(vo.getLow()));
				obj.put("Close", Float.valueOf(vo.getClose()));
				obj.put("Date", sdf.parse(vo.getDate()).getTime());
				
				jarr.put(obj);
			}
			return jarr;

 

Controller

	@PostMapping("/Symbol")
	@ResponseBody
	public String getstockChart(@RequestParam("Symbol") String Symbol){
		JSONArray jobj = svc.getstockChart(Symbol);
		System.err.println("컨트롤러 " + jobj);
		return jobj.toString();
	}
728x90