질문Q #14660
kaido님께서 내주신 미션을 수행중인데 막히는 부분이 생겨 질문 드리네요 ㅜㅜ
정수리2016-08-11 14:41:27

kaido님께서 주신 미션중에

 

1차원 배열에서 랜덤으로 과일을 뽑아 ajax로 받아와서 과일에 따른 색깔을 alert를 통해 출력하는 것인데

 

$test= array('사과', '포도', '수박');
$fruit =  array_rand($test);
$test = '[{"fruit":"'.$test[$fruit].'"]}';
echo $test;

 

통해 랜덤으로 과일은 뽑아 왔습니다.

 

그리고 

$(document).ready(function(){
			$.ajax({
				type:'get',
				dateType:'json',
				url:'ranajax.php',
				success:function(date){
					var test  = JSON.parse(date);
					alert(typeof(test));
					if(test == '사과'){
						alert('red');
					}
					if(test == '포도'){
						alert('puple');
					}
					if(test == '수박'){
						alert('green');
					}
				}
				});
			});

과일에 따른 색을 출력하려고 하는데 잘안되네요;

파이어버그로 확인했을 때 응답창에서는 

[{"fruit":"과일이름"]

이렇게 나오구요

 

에러는 

SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 15 of the JSON data

이런 에러가 나오는데 문법상 오류인것 같은데;;

아무리 봐도 잘못된 부분을 몾찾겠네요;;

 

답변9
#1 아플바 2016-08-11 15:06:56

3번째줄에서  뒤에 괄호 순서 바뀌었네요  ]}  => }]   

$test = '[{"fruit":"'.$test[$fruit].'"]}'

#2 정수리 2016-08-11 15:11:21

@아플바

$test = '[{"fruit":"'.$test[$fruit].'"}]';

수정했는데도

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON date

오류가 계속 뜨네요 ㅜㅜ 어디가 문제 인지 참;;

 

#3 정수리 2016-08-11 15:15:50

자체 해결 하였습니다.

dataType:'json'을 삭제 해주니 잘되네요;

 

dataType:'json' 설정해놓고

JSON.parse함수를 사용하면 에러가 뜨는데 왜;;

에러가 뜨는지 알려주실분 계실까요 ??

#4 An녕 2016-08-11 15:26:30

http://credemol.blogspot.kr/2011/08/jquery-ajax-datatype-json.html

저도 몰라서 찾아보니깐 여기글 보니깐 이해가 되네요

#5 정수리 2016-08-11 15:36:49

@An녕

답변감사합니다

달아주신 링크도 몰라서 찾아보았을때 보았던건데 그글을 읽어도 제대로 이해가 안되서 ㅜㅜ

#6 박준영 2016-08-11 16:08:56

$test= array('사과', '포도', '수박');
$fruit = array( 'fruit' => $test[array_rand($test)] );
echo json_encode($fruit, JSON_UNESCAPED_UNICODE);

 

소스는 이렇게 하시는게 좀더 깔끔할거 같애용.

 

#7 정수리 2016-08-11 17:15:50

@박준영

답변감사합니다 ^^

 

넵 그렇게 고쳐야 겠네요

#8 kaido 2016-08-11 18:04:44
 dateType:'json'

이미 json 타입으로 받으셨습니다.
JSON.parse(date)  이건 하지 않아도 됩니다.
type 을 제거 하면 디폴트가 text 라서 text 타입을 반대로 JSON으로 파싱 하셔서 된것입니다.



if(date.fruit == "사과"){ ... }

이런식으로 간단하게 표현 하시면 됩니다.

 

#9 kaido 2016-08-11 18:11:20

팁으로 제가 json이 아니여도 표현이 가능 하다고 했던것중 하나 입니다.

방법에 따라서는 효율적 일 수도 있습니다.

 

dateType : 'html'  //html 타입으로 받으시고

 

$test= array('사과', '포도', '수박');
$fruit =  array_rand($test);

if($fruit == "사과"){$color = "red";}
if($fruit == "포도"){$color = "puple";}
if($fruit == "수박"){$color = "green";}


echo "<script> alert(' ".$color." '); </script> ";


이런 방법도 가능 합니다.
이 방식은 생각 이상으로 활용도가 높습니다.