ajax 페이지 호출 횟수(?) 질문

ajax 페이지 호출 횟수(?) 질문

QA

ajax 페이지 호출 횟수(?) 질문

본문

페이지에서 버튼을 눌렀을때 ajax로 호출되어 실행되는 sql문이 여러번 실행됩니다....

 

update문에서 int 타입인 필드값을 버튼을 누를 때 마다 기존값에 +1 하는 sql을 실행했는데

 

어떤건 +26, 또 어떤건 +6 이런식으로 호출되네요 ㄷㄷ;;

 

 

while($row = mysqli_fetch_array($result)) 안에

 


<input type="hidden" id="tasker_id" name="tasker_id" value="<?php echo $row['tasker_id']; ?>">
<button class="reject_btn" value="<?php echo $row['submit_id']; ?>">거절하기</button>

라는 히든타입의 인풋태그와 '거절하기'라는 버튼이 있습니다

 


<script>
$(function() {
    $("div").on("click", "button.reject_btn" , function() {
        var value = $(this).val();
        var aa = "#result";
        var result_span = aa.concat(value);
        var bb = "#result_div";
        var result_div = bb.concat(value);
        var cc = "#checkbox_div";
        var result_checkbox = cc.concat(value);
        
        var reason = $("#reason option:selected").val();
        var tasker_id = $("#tasker_id").val();
        
        $.ajax({
            url : "http://suyong0507.dothome.co.kr/bbs/reject.php",
            dataType: "json",
            type : "post",
            data : {
                submit_id : value,
                reason : reason,
                tasker_id : tasker_id
            },
            success : function(res) {
                if(res) {
                    $(result_span).text(res.aaa);
                    $(result_div).html(res.ccc);
                    $(result_checkbox).html(res.ccc);
                }
            }
        });
    });
});
</script>

 


<?php
include_once "./_common.php";
$submit_id = $_POST['submit_id'];
$reason = $_POST['reason'];
$tasker_id = $_POST['tasker_id'];
$sql = "update g5_submit set checking = 2, reason = '$reason' where submit_id = '$submit_id' ";
$result = sql_query($sql);    
$sql2 = "select * from g5_submit where submit_id = '$submit_id' ";
$result2 = sql_fetch($sql2);
$sql3 = "update g5_member set reject_task = reject_task + 1 where mb_id = '$tasker_id' ";
$result3 = sql_query($sql3);
if($result2['checking'] == 2) {
    echo json_encode(array("aaa"=>"거절됨", "ccc"=>""));
}
?>

일단은 js코드와 ajax로 호출되는 페이지인 reject.php 전문인데, 클릭으로 ajax 호출을 할시

db에 +1이 아닌 +26이 저장됩니다;;

 

데이터값이 26개인것도 없고 26이랑 관련된 db값을 찾아봤지만도 왜 저런 숫자가 +됬는지 이해할수가 없네요

 

아무리 생각해봐도 reject.php가 26번 호출됬다고 밖에 설명이 안되네요

 

혹시 리턴값을 뿌려주는 과정에서 ajax가 여러번 호출되나요??

 

select는 전혀 문제 없고 varchar 타입의 문자를 update하는 것도 문제 없습니다(숫자가 아니기에...)

 

 

 

 

 

이 질문에 댓글 쓰기 :

답변 4

991170420_1610519250.0213.png

크롬 개발자도구에서 Network쪽 들어가시면

ajax호출시에 해당 파일이 불러와질때 동적으로 실행되는 파일들이 뜰겁니다.

거기에서 1번만 실행되는지 여러번 실행되는지 체크해보세요.

.reject_btn 버튼의 부모 div 가 26번 있어서 그런것 같아요.

<div>

  <div>

    .........

    <button>

그럼 $('div') 이 셀렉터에 문제가 있는 것 같군요. 

보통은 이렇게 하지 않지만,

$("div").on("click", ">button.reject_btn" , function() {

이렇게 div 바로 아래에서 찾도록 해보셔요.

 

그리고 루프로 버튼 삽입시 id="tasker_id" 중복도 고려하셔야겠고요. 

굳이 input hidden 으로 파라미터를 사용하지 마시고 

<buttton class="reject_btn" data-tasker="<?php echo $row['tasker_id']; ?>">

이런식으로 data 프로퍼티를 이용해보셔요.

 

또, 버튼 클릭시 중복 클릭 방지를 위해 클릭했을 때 

.reject_btn 버튼을 disabled 시켰다가 

ajax success 시 다시 활성화 시켜주는 것도 고려하시고요.

 

제가 테스트해 본 코드는 


<ul><ul><ul><ul id="test"></ul></ul></ul></ul>
<script>
$(function() {
    var html = '';
    var $test = $('#test');
    for (var i=0; i<5; i++) {
        html += '<li class="my-1">';
        html += '<button type="button" class="btn btn-outline-secondary reject" value="'+i+'">클릭</button>';
        html += '</li>';
    }
    $test.append($(html));
    $(document).on('click', '.reject', function() {
        console.log($(this).val())
    });
});
</script>

일부러 ul 태그를 중첩시켜서 해봤습니다.

 

 

$("div").on("click",

이부분을 특정 버튼으로 잡고 우선 테스트 해보셔야 할것 같습니다.

 

아니면 function 으로 잡고 한번 돌렸을때 값을 보셔야 할것 같습니다.

* "혹시 리턴값을 뿌려주는 과정에서 ajax가 여러번 호출되나요??"

=> 여러번 호출되지 않습니다. 한번만 호출됩니다.

 

* "db에 +1이 아닌 +26이 저장됩니다;;"

=> "update g5_member set reject_task = reject_task + 1 ~ "

기존에 25 로 저장된 상태였다면 26이 될 수 있습니다.

 

$(".reject_btn").on("click", function() {
이걸로 바꾸니까 한번 호출되네요~ 그런데 원래 제가 저 방식으로 했었거든요
처음에 다른 ajax 페이지를 호출하고 난 다음 거절하기 버튼 ajax를 호출하면 작동이 안되드라구요
$("div").on("click", "button.reject_btn" , function() {  이렇게 해줘야 거절하기 버튼이 작동합니다

하나가 되면 하나 말썽이네요 ㅜㅜ

동적으로 클릭 이벤트 엘리멘트가 추가된다면..
$(".reject_btn").on("click", function() {
->
$("document").on("click", ".reject_btn" , function() {
으로 변경하면 될 듯 합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,123 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT