[php/js] SyntaxError: Unexpected token < in JSON at position

Jiwon·2022년 7월 29일
0

자바스크립트의 ajax 통신을 이용해 php로 post해서 보내는데,
SyntaxError가 발생했다.

결론부터 얘기하면
php에 데이터를 보내서, tpl 을 한번 더 호출하는데
json 형태로 출력하지만, 내가 if문에서 exit; 로 끝내는게 아니라
break; 로 끝내서 뒤에 tpl 구문들도 같이 return 되어 에러가 발생했다.

즉, php에서 걸어주는 if문에서 break;가 아닌 exit로 변경해서 해결.


해결방법

일단

function test(){
  
  	var params = {};
  	params.testWorld = 'test';
  	params.testType = 'test';
  
	$.ajax({
      	type : "post",
    	url : "./text.php",
      	data : params,
      	dataType : 'json',
      	success : function(Data){
			console.log(Data);
        },
      	error : function(status, request, error){
        	console.log(error);
        }
    });
}

코드를 그대로 옮길 수 없어,
테스트 코드라고 생각하고 봐보자.

첫 번째 시도.
url 에 타입을 보내서 보내기

test.php에서 url에 파람값을 받아, $_GET['testWorld'] 식으로 받고 있었기 때문에
url에 직접적으로 넘겼다.

//function test(testWorld) 식으로 다름 함수를 통해 파람 값 전달 받는 식으로 변경
url : "./test.php?testWorld=" + test

두 번째 시도.
php문에서 if문 수정

if(isset(testWorld)){
	$aResult = (
    	"result" => "result",
        "message" => "success"
        );
        
   echo json_encode($aResult);
   exit;	//원래 break; 였음
}

여기서 break;를 걸었던 이유는
if문을 switch문으로 감싸고 있었는데,
그렇게 하면 예시문이 너무 길어지기 때문에 생략.


[php] break? return? exit? 차이

  • break = 루프 탈출
    for, foreach, while 등 여러 번 반복되는 루프의 경우에 해당.
    루프 이후에 등장하는 코드를 계속 실행.
    if문은 반복문이 아니라 조건 충족시 1번만 실행되는 코드이므로 해당없음

  • return = 함수 탈출 또는 인클루드 탈출
    함수 안에서 쓰면 함수 실행을 종료하고, 그 함수를 호출했던 지점으로 돌아가서 계속 실행.
    함수 밖에서 쓰면 현재 파일을 인클루드했던 파일로 돌아가서 계속 실행.
    함수 밖인데 인클루드한 것도 없으면 그냥 종료됨. 즉 exit 과 동일한 효과가 됨.

  • exit, die = 무조건 종료
    말 그대로 프로그램이 죽어버림.

break : 루프(for, while, foreach) 에서만 사용, 해당 루프가 끝나고 밑으로 흐름
return : 함수, 인클루드가 끝남, 함수가 끝날 경우 밑으로 흐르고 클래스에 return 될 경우 클래스가 끝나고 호출한 클래스가 실행
exit : 프로세스 자체가 끝남. 밑에 로직이던 호출한 클래스던 다 끝남.

https://shutcoding.tistory.com/39

profile
과연 나는 ?

0개의 댓글