More

jquery ajax 배열 data를 java에서 받으면 null 이 나올 때

jquery-ajax-배열-문제

jquery로 testArray 라는 배열을 만들고 ajax 배열 데이터를 넘기면 당연히 배열 데이터이기 때문에 java에서 받을 때 request.getParameterValues("testArray") 로 받는 게 일반적일 것 같지만 넘어오기 전 세팅에 따라 null 값이 나오는 경우가 있습니다. 


1. java에서 처리

ajax로 배열이 넘어오기 전 jquery traditional 처리를 하지 않을 경우 아래와 같은 현상이 발생합니다.


var testData = [1,2,3];
$.ajax({
	method: "POST"
	, url: "test.jsp"
	, data: {testData :testData }
});

String testData[] = request.getParameterValues("testData");
// 실제로 넘어온 데이터 testData[]=1&testData[]=2&testData[]=3

넘어오는 데이터가 testData=1&testData=2&testData=3 이런 식으로 넘어와야 위의 자바 코드 처럼 실행했을 때 배열을 정상적으로 받을 수 있는데 파라미터에 대괄호 [] 값이 붙기 넘어오기 때문에 null 이 나오게 됩니다. 

이런 경우 아래 처럼 getParameterValues 파라미터명에 대괄호 []을 붙여줘야 합니다.


String testData[] = request.getParameterValues("testData[]");
// System.out.println(testData[0]) 출력시 1로 정상 출력


2. jquery 에서 처리

jquery 실행 전 jQuery.ajax settings 을 통해 traditional = true 를 설정하면 변수가 서버로 전송될 때 대괄호가 붙는 현상을 변경해줘서 java에서 1번의 사례 처럼 받아도 정상 출력 됩니다.


var testData = [1,2,3];
$.ajax({
	method: "POST"
	, url: "test.jsp"
	, data: {testData :testData }
	, traditional : true
});
// $.ajax traditional : true 추가
// 변수 데이터가 testData=1&testData=2&testData=3 로 넘어감