개발 Q&A

제목 kaido님께서 내주신 미션을 수행중인데 막히는 부분이 생겨 질문 드리네요 ㅜㅜ
글쓴이 정수리 작성시각 2016/08/11 14:11:27
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 14859   RSS

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

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

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

 

 다음글 ajax를 오늘 하루 공부하면서 이해안되는 부분이 있어... (3)
 이전글 json 사용이유와 사용용도에 대해 알고싶습니다, (2)

댓글

아플바 / 2016/08/11 14:36:56 / 추천 0

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

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

정수리 / 2016/08/11 14:41:21 / 추천 0

@아플바

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

수정했는데도

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

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

 

정수리 / 2016/08/11 14:45:50 / 추천 0

자체 해결 하였습니다.

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

 

dataType:'json' 설정해놓고

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

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

An녕 / 2016/08/11 14:56:30 / 추천 0

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

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

정수리 / 2016/08/11 15:06:49 / 추천 0

@An녕

답변감사합니다

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

박준영 / 2016/08/11 15:38:56 / 추천 0

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

 

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

 

정수리 / 2016/08/11 16:45:50 / 추천 0

@박준영

답변감사합니다 ^^

 

넵 그렇게 고쳐야 겠네요

kaido / 2016/08/11 17:34:44 / 추천 0
 dateType:'json'

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



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

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

 

kaido / 2016/08/11 17:41:20 / 추천 0

팁으로 제가 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> ";


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