개발 Q&A

제목 ajax 문제
카테고리 PHP
글쓴이 손씨가문 작성시각 2020/06/03 13:21:18
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 10339   RSS

안녕하세요.

ajax 관련 질문을 드리고 싶어서 이렇게 글을 남깁니다.

현재 모집 데이터를 받고 있는데, 특정한 곳에서 입력 후 등록 시에 DB에 전부 0값으로 찍혀서 들어오고 있습니다.

또한 연타 클릭 방지를 위해 click_num을 줘서 ajax가 돌아가는 동안 연타가 안되게끔 막았는데 DB에는 여러개가 들어오네요.

DB로그를 보아도 딱히 이상은 없구요. 데이터만 0으로 들어갑니다.(form 시에 데이터를 못가져가는것같은데, 전부 다 그런게 아니고, 특정 몇몇 모집자가 그렇네요...)

밑에는 소스 코드입니다.

//HTML

if(click_num == 0){

      click_num = 1;

   $.ajax({

       url : '/join/company_complete',

       processData:false,

      contentType:false,

      data:formData,

      type:"POST",

     success:function(result){

     click_num = 0;

     if(result == 'success'){ 

        alert('완료');

     }

 

    else

    {

         alert('오류가 발생했습니다. 다시 시도해주세요.');

     }

   }

});

}

else

{

   alert('현재 등록 중입니다.');

     return false;

}

 

//controller

$set_values = array(

'charge_position' => $recruit_charge_position,

'charge_respon' => $recruit_charge_response,

'charge_call' => $recruit_charge_call,

'charge_phone' => $recruit_charge_phone,

'charge_email' => $recruit_charge_email,

'company_pwd' => $company_pwd_encode

);

try{

$this->db->insert('exhibition_company_info', $set_values);

$idx = $this->db->insert_id();

# 세션처리

$sess_values = array(

'user_idx' => $idx,

'user_id' => $company_number,

'user_name' => $company_name,

'user_type' => 2

);

$this->session->set_userdata($sess_values);  

echo 'success';

}

catch(Exception $e){

$set_values = array(

'error_text' =>$this->db->error(),

);

$this->db->insert('log_error_message', $set_values);

echo 'dberror';

}

 

 

 

try catch시에도 catch로 들어간 흔적은 없네요.....

이게 제가 테스트 시에는 문제 없이 잘 되고 있어서 오류를 찾을수가 없네요.......

그렇다고 신청자에게 전화로 계속 테스트 해달라고 할 수가 없어서요........

 

 

 다음글 CI 3 서버의 동영상 파일 스트리밍 - 서버 동영상 ... (2)
 이전글 php 출력 (2)

댓글

한대승(불의회상) / 2020/06/03 13:42:57 / 추천 0
코드상으로는 특별한 오류는 없어 보입니다.
엽토군 / 2020/06/03 13:48:37 / 추천 2

서버단 소스는 모르겠고 클라이언트단 JS 소스가 코드스멜이 좀 있네요. https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%EC%8A%A4%EB%A9%9C

1. $.ajax() 콜하기 직전에 console.log(formData) 찍으면 뭐가 나오긴 하나요? 안 나올 거 같습니다.

2. 특정 몇몇 모집자가 그렇다면 상당한 확률로 브라우저 호환성 문제입니다. IE 낮은 버전이나 사파리나 파이어폭스로 한번 해보시겠어요?

3. 연타 클릭 방지라고 말씀하시는 그것은 double submit이라는 오래된 문제입니다. 일반적으로 다시 제출할 수 있을 때까지 제출 수단이 되는 DOM 객체(submit 버튼, 폼전체 등)에 disabled를 주는 방식으로 처리합니다. 지금 구현하신 플래그 변수 방식으로 더블 서브밋을 방지하는 건... 저는 처음 봅니다. 더블서브밋 문제에 관련해서 좀더 알아보시면 좋을 것입니다.

+ 이거 왜 댓글 중간에 광고가 들어가는거죠... ㅡㅡ; 제가 광고붙인거 같네요;;; 맨앞이든 맨뒤든 float right 로든 그렇게 나오는게 낫겠는데요.

한대승(불의회상) / 2020/06/03 14:12:06 / 추천 0
@엽토군 사악한 구글이....
손씨가문 / 2020/06/03 14:55:40 / 추천 0

다들 감사합니다. 더블서브밋은 알아보겠습니다.

사파리나 파폭으로 했을때에도 딱히 문제가 없네요. IE 낮은 버전일 확률이 있긴하지만, 신청자를 받는거다보니 막 물어볼순 없어서....혹 신청자중에 또 그런 현상 있는지를 봐야 할 것 같아요........

 

정보 감사합니다!

DominicKim / 2020/07/07 10:55:36 / 추천 0
저도 연타 되는 문제로 허덕였는데, 버튼 Disable로 해결했었습니다.. ajax가 처리하는 동안 버튼은 로딩 버튼으로 바꿔서 위화감을 좀 줄였었네요