자바스크립트의 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문으로 감싸고 있었는데,
그렇게 하면 예시문이 너무 길어지기 때문에 생략.
break = 루프 탈출
for, foreach, while 등 여러 번 반복되는 루프의 경우에 해당.
루프 이후에 등장하는 코드를 계속 실행.
if문은 반복문이 아니라 조건 충족시 1번만 실행되는 코드이므로 해당없음
return = 함수 탈출 또는 인클루드 탈출
함수 안에서 쓰면 함수 실행을 종료하고, 그 함수를 호출했던 지점으로 돌아가서 계속 실행.
함수 밖에서 쓰면 현재 파일을 인클루드했던 파일로 돌아가서 계속 실행.
함수 밖인데 인클루드한 것도 없으면 그냥 종료됨. 즉 exit 과 동일한 효과가 됨.
exit, die = 무조건 종료
말 그대로 프로그램이 죽어버림.
break : 루프(for, while, foreach) 에서만 사용, 해당 루프가 끝나고 밑으로 흐름
return : 함수, 인클루드가 끝남, 함수가 끝날 경우 밑으로 흐르고 클래스에 return 될 경우 클래스가 끝나고 호출한 클래스가 실행
exit : 프로세스 자체가 끝남. 밑에 로직이던 호출한 클래스던 다 끝남.