CI 묻고 답하기

제목 ajax 다시 문의드려요.
글쓴이 appo 작성시각 2015/07/23 18:20:08
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 19653   RSS
구글링, stackoverflow.com같은데서도 해결책을 찾지 못했습니다.
파이어폭스에 포스트도 제대로 넘어가고,
응답란에 [{"user_idx":"8","name":"appo"},{"user_idx":"7","name":"리그오브"}] 나옵니다.
컨트롤러는
$result = $this->Admin_m->ajaxA($data);
echo json_encode($result,JSON_UNESCAPED_UNICODE); <-이것도 많이고쳐보고,
혹시 모델에서 문제인가 싶어서 이것저것 변경해보고 했는데 컨트롤러도 고쳐보고 했지만
뷰에서 에러가 계속 납니다.
success:function(data) {
        var result = $.parseJSON(data);
        //alert(result[0].id);
        $("#Select").html("선택");
        for( var i=0 ; i < result.length ; i++){
            $("#Select").append(""+result[i].name+"");
   },
   error : function(request, status, error){
      alert("error"+request+status+error);

alert내용
error[object Object] parsererror SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 3 of the JSON data

에러가 계속 나고, non-whitespace character 를 찾아보니 띄어쓰기가 아닌 문자라고 하는데,
그런 문자가 없습니다.
대체 어디가 문제일까요?


그리고 추가로
화면에서 선택한 순으로 정렬하고자 할때 셀렉트 박스를 이용한다고 하면,
책에 있는 것처럼 $search_word같이 박스의 값을 post로 보내는게 나을 것 같은데
예를들어 가입날짜, 레벨, 아이디순서를 select창에서 선택하면 그 순서대로 정렬하려면
그걸 선택할때마다 post로 보내서 밑에 리스트를 정렬하려면, 이것도 ajax로 하는게 나을까요?
아니면 그냥 폼 post가 나을까요?
그냥 컨트롤러에서 처음 받은 데이터를 뷰에서 select창의 값대로 정렬하려고 생각했었는데
그러면 서버에서 내용이 변경되더라도 반영이 안되니 그때그때 db에 요청해야 할 거 같아서 안될거같구요.
하나의 결과물에 방법이 여러개이니 고민되네요.

대략적인 가능할 거 같은 답변이라도 달아주시면 열심히 수정해보겠습니다.
 다음글 form_validation input 배열값 검사 ... (2)
 이전글 데이터 히스토리 관리는 어떻게 하시나요? (1)

댓글

한대승(불의회상) / 2015/07/23 18:46:31 / 추천 0
console.log() 함수를 이용하여 data 를 확인해 보세요.
에러 메시지 대로 라면 화이트 스페이스가 문제 같네요.
appo / 2015/07/23 23:48:03 / 추천 0
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
return window.JSON.parse( data + "" );
파이어폭스 콘솔에서 이렇게 뜨네요.

Query.parseJSON = function( data ) {
 // Attempt to parse using the native JSON parser first
 if ( window.JSON && window.JSON.parse ) {
  // Support: Android 2.3
  // Workaround failure to string-cast null input
  return window.JSON.parse( data + "" );
 }
밑에꺼로 뜨는데 왜 이러는지...
letsgolee / 2015/07/24 10:08:09 / 추천 0
success:function(data) {
    console.log(data);
}

이렇게해야 JSON 형식으로 파싱되기 이전의 리턴받은 데이터가 어떤지 확인 가능합니다. 그 결과를 먼저 보세요.
혹 인코딩은 서로 일치하는가요? 
kaido / 2015/07/24 14:27:08 / 추천 0
이런거 확인하기 제일 쉬운 것중 하나는

json 으로 리턴 받지 말고 html 이나 text로 리턴 받아 보세요.

분명 이상한 글자가 묻어있거나 헤더정보등이 붙어 있을 겁니다. 
json 파싱은 json 말고는 아무것도 들어가면 안됩니다.

해괴한 깨진 글자가 묻어 있다면 인코딩이 utf8 boom+ 으로 되어있는지 확인해보세요.
 
appo / 2015/07/24 15:02:04 / 추천 0
인코딩은 utf-8로 주고받고 맞습니다.
[Object { user_idx="4", name="lol"}] 콘솔에서 이렇게 뜨는데
바로 밑에
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
return window.JSON.parse( data + "" );
이렇게 뜨구요.

text,html로 리턴받으면 잘 돌아갑니다. 그냥 json은 포기할까요?ㅠㅠ
해괴한 글자가 묻어오지도 않고, 헤더정보도 없어요. 모델에서 받을때 앞에 stdclass가 붙는데 그게 json_encode에 넣으면 제대로 json으로 변환해서 출력해주는데 왜 그런지 모르겠네요...
일단 html로 만들고, 셀렉트박스 고민해야겠네요.
여길 모르고 만들었다면 정말 머리싸매다가 포기했을거 같네요. 여기저기 찾다가도 여기로 다시 돌아오네요. 감사합니다.
 
한대승(불의회상) / 2015/07/24 15:29:14 / 추천 0
@appo 해괴한 문자중 화면에 표시 되지 않는것도 있습니다.
에러 메시지 대로라면 json 데이터에 문제가 있는게 맞습니다. ^^