CI 묻고 답하기

제목 Ajax 질문좀 드릴게요. 미치겠습니다.
카테고리 CI 2, 3
글쓴이 째리 작성시각 2019/01/18 11:30:42
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 13191   RSS

분명히 저번주에 만들어놨을때는 잘됬는데

뭐때문인지 이상하게 안되네요.

model 쿼리문은 로그인할때랑 같이사용하기때문에 return값이 없을수가 없는상태입니다.

dataType을 text, json둘 다 사용해도 리턴이 이상하게넘어옵니다.

헤더부분이 통째로 리턴되는것같습니다;;

코드한번 봐주세요.

$.ajax({
				type:'POST',
				dataType:"text",
				url:"/user/kst_user/idcheck",
				data:{"UID":UID},
				success : function(result){
				if(result == 0){
					alert("중복된 아이디입니다.");
					$("#UID").val('');
					$("#UID").focus();
				}else{
					alert("사용가능한 아이디입니다.");
					$('#UID').attr('readonly','readonly');
					$('.login50-form-btn').css('background-color','#66D37E');
					$('#idcheckicon').removeClass();
					$('#idcheckicon').addClass('fa fa-check');
					$('#idcheckbtn').removeAttr("onclick");
					$('#validation').val('1');
					}
				}
			});

 


    function dataType_JSON(){
        $UID = $this->input->post('UID');
        $user = $this->user_model->getUserID(array('UID'=>$this->input->post('UID')));

        if($user->UID == $this->input->post('UID')){
            $result = ['success' => false];
            echo json_encode($result);
        }else{
            $result = ['success' => true];
            echo json_encode($result);
        }
    }
    
    function dataType_TEXT(){
        $user = $this->user_model->getUserID(array('UID'=>$this->input->get('UID')));

        if($this->input->post('UID') == $user->UID){
            return 0;
        }else{
            return 1;
        }
    }

 

function getUserID($id)
    {
        $result = $this->db->get_where('USER', array('UID'=>$id['UID']))->row();
        return $result;
    }

 

 다음글 파일업로드 질문좀드릴게요.. (7)
 이전글 model 에서 다른 파일을 include 하고 싶은데... (2)

댓글

째리 / 2019/01/18 11:40:55 / 추천 0
컨트롤러 함수가 2개인 이유는 json, text두개 전부 올린겁니다!
변종원(웅파) / 2019/01/18 11:41:31 / 추천 1

헤더가 통째로 나온다면 컨트롤러에 remap으로 헤더, 푸터를 자동 추가했거나 어디선가 헤더가 선언된겁니다.

보통 ajax용 컨트롤러를 따로 만들거나 remap에서 ajax 메소드는 헤더, 푸터를 붙이지 않도록 처리합니다.

째리 / 2019/01/18 11:43:38 / 추천 0
오호 감사합니다 한번 해보겠습니다.
째리 / 2019/01/18 12:07:13 / 추천 0

웅파님 json형태로 리턴했을때

Message:  Trying to get property of non-object 이런메세지가나오고,

중복되지않는 아이디를 검색했을땐 else부분이 작동되지않습니다.

중복되는 아이디는 잘 작동하구요. 왜이럴까요..

한대승(불의회상) / 2019/01/18 12:25:41 / 추천 0
console.log(result) 로 result 결과가 어떻게 넘어오는지 부터 확인해 보세요.
kaido / 2019/01/18 12:29:41 / 추천 0

ajax가 꼬였다 싶으면 추천해 드리는 방법이...

그냥 submit 으로 때려서 확인해 보시라는 것입니다.

 

$this->user_model->getUserID(array('UID'=>$this->input->get('UID')));

위에는 post로 받아가시고 밑에선 get 으로 받음

 

엽토군 / 2019/01/18 12:31:18 / 추천 0

return 0; 이나 return 1; 하는 식으로 넘기면 JS로 넘어오는 시점에서 그게 불리언이 될 가능성이 있습니다. 제 기억에 PHP AJAX는 return을 하면 안되고 echo로 값을 보내야 합니다. echo json_encode(배열) 써보세요.

째리 / 2019/01/18 13:07:46 / 추천 0

return 0은 text로 받을때 테스트한거구요.

지금 따로 분리해서해보니 json사용안하고 일반text로는 정상적으로 작동됩니다.

하지만 json이문제에요.. 중복된 아이디일경우 echo로 인코드되는데

사용가능한아이디를 적으면 먹통됩니다..

째리 / 2019/01/18 13:09:23 / 추천 0
public function json($method){
        switch($method){
// if부분은 작동됨 (중복될경우) else부분이 자꾸 false로넘어감
            case "idCheck":
                $UID = $this->input->post('UID');
                $user = $this->user_model->getUserID(array('UID'=>$UID));
        
                if($user->UID == $UID){
                    $result = ['success' => false];
                    echo json_encode($result);
                }else{
                    $result = ['success' => true];
                    echo json_encode($result);
                }
                break;
// 작동됨
           case "idCheckT":
                $UID = $this->input->post('UID');
                $user = $this->user_model->getUserID(array('UID'=>$UID));
        
                if($user->UID == $UID){
                    return 0;
                }else{
                    return 1;
                }
                break;
        }
    }

 

하마쿵쿵 / 2019/01/18 15:49:35 / 추천 0
json_encode 옵션으로 JSON_UNESCAPED_UNICODE 추가해서 시도해 보세요