더보기버튼 오류가 납니다..

더보기버튼 오류가 납니다..

QA

더보기버튼 오류가 납니다..

본문

ajax로 더보기 버튼을 구현하는 과정에서


더보기를 클릭하면 값은 제대로 나오는데 오류가 납니다..


Uncaught TypeError: Cannot read property 'bf_file' of undefined

    at Object.success (board.php?bo_table=used_market:211)

    at l (jquery-1.8.3.min.js:2)

    at Object.fireWith [as resolveWith] (jquery-1.8.3.min.js:2)

    at T (jquery-1.8.3.min.js:2)

    at XMLHttpRequest.r (jquery-1.8.3.min.js:2)


에러가 나는 부분은 

if(result[q]['bf_file'] == null || result[q]['bf_file'] == undefined) 입니다...

어떻게 해야될까요...


이 질문에 댓글 쓰기 :

답변 3

result[q] 영역에

['bf_file']로 된 것필드명 자체가 할당되지 않은겁니다.


결과로 받은 result는 Json 형태이고

위의 예제로는 어떻게 봐도

쿼리의 맨마지막 최종Row값만 json 으로 가지고 있는 구조인걸로봐서


result.bf_file 로 확인하셔야 맞는거 같네요


즉, 오류가 난다고 하는 부분을(다른 로직오류가 없다는 가정하에)

 

 if (result.bf_file == null || result.bf_file == undefilned) {   

로 비교하시면되는데

자바스크립트의 특성상

null과 undefiened는 둘다 false로 인식됩니다.

좀더 변형을 주면


 if (!result.bf_file) {    

로 대치할수있습니다.


그런데..로직에 오류가 있네요

for 문은 열씸히 돌리는데

결국 넘기는건 최종 Row 이고

json구조의 1차원배열을 받아서 


2차원배열접근하듯 하셔서 오류가 나는것같네요

더 설명하기엔 너무 길어질거 같아서...


bf_file:"3717237551_OtxDPMKJ_d7e68b0083f1b42c547427fae9e4ce724534bd00.jpg"
bo_subject:"익명게시판"
ca_name:"강남동"
mb_id:""
wr_1:""
wr_2:""
wr_3:""
wr_4:""
wr_5:""


json 넘어온 result를 consol.log()로 찍어보면
위와 같이 bf_file이 나오는데 할당되지 않은건가요??ㅠ

사진출력은 잘되는데
if문에서만 저런 에러가 납니다..ㅠ

result.bf_file은 안되구요ㅠ


아래 적어주신 코드에
혹시


$.ajax({ 
url : "ajax.more_read.php", 
 type : "get", 
dataType : "json", 
 data : { no : btn } 
success: function(result){ 
for(var q = btn; q < btn+11; q++){ 
  if(result[q]['bf_file'] == null || result[q]['bf_file'] == undefined){ 
      var img_src = ''; 
  }else{ 
      var img_src = "<img src=\"/data/file/"+ 
                            result[q]['wr_10']+"/"+result[q]['bf_file'] 
                            + "\" class='bo_img'></a></div>"; 
    } 

로 되고 끝인가요?


});

이게 빠진건 아니죠?

아래 붙여주실때만 누락된거죠?

그리고,
제가 답변드린것에서는
for(var q=btn; q< btn+11;q++){  //여기와
} // 닫는게 있다면 같이

for문만 제거하고 확인해보시는게 어떨까요?


네ㅎ 댓글에만 누락됬습니다ㅠ 그런데 for문을 지울수가 없어요ㅠㅠ 제가 초보다 보니 코딩을 막해서

for문안에 많은게 들어가 있어서요 ㅠㅠ 더보기 버튼이다 보니 처음에는 10개를 출력하고
그다음부터 10개를 출력해주는 for문입니다. 그 for문으로 ajax로 받아온 result를 $().appendTo 로 10개를 찍어내는 거죠 ㅠㅠ 다른건 다괜찮은데 저 bf_file에만 빨간줄이 생겨버려요ㅠㅠ bf_file이 사진출력하는건데 막상 사진은 잘나오는데 말이죠ㅠㅠ

bf_file이라는 object가 전달이 되지 않는듯 한데 이렇게만 봐서 정확히 어떻게 답변을 드려야 할지 애매합니다.

전체코드를 보여드리기에는 너무 길고 그래서 연관된 부분을 보여드리겟습니다
<자바스크립트 부분>
$.ajax({
url : "ajax.more_read.php",
 type : "get",
dataType : "json",
 data : { no : btn }
success: function(result){
for(var q = btn; q < btn+11; q++){
  if(result[q]['bf_file'] == null || result[q]['bf_file'] == undefined){
      var img_src = '';
  }else{
      var img_src = "<img src=\"/data/file/"+
                            result[q]['wr_10']+"/"+result[q]['bf_file']
                            + "\" class='bo_img'></a></div>";
    }

<ajax.more_read.php>
$sql_sort = "select a.*, c.bo_subject, CASE WHEN b.wr_id IS NOT NULL
THEN b.bf_file ELSE NULL END as bf_file
FROM {$g5['write_schedule_table']} a
LEFT JOIN {$g5['board_file_table']} b
ON a.wr_id = b.wr_id AND a.wr_file >= 1 AND b.bf_no=0
LEFT JOIN {$g5['board_table']} c
ON a.wr_10 = c.bo_table WHERE wr_is_comment = 0
ORDER BY {$sort} DESC LIMIT {$first_rows},10";
$result_sort = mysqli_query($link, $sql_sort);

for($k=$first_rows; $k < $end_rows; $k++){
$result_last[$k] = mysqli_fetch_array($result_sort);
}
echo json_encode($result_last);


이정도 밖에 없어요 연관된게..

더보기 버튼 누르면 ajax.php에서 쿼리 결과 json형식으로 받아와 result 출력하는건데

더 필요한 부분이 있으면 말씀해주세요..

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

회원로그인

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