테스트 사이트 - 개발 중인 베타 버전입니다

더보기버튼 오류가 납니다.. 채택완료

Jaeuk 8년 전 조회 2,776

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개

채택된 답변
+20 포인트
플래토
8년 전

result[q] 영역에

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

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

위의 예제로는 어떻게 봐도

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

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

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

</span> </p><p>
</p><p><span style="color: rgb(51, 51, 51); font-family: 돋움, Dotum, sans-serif; font-size: 12px; background-color: rgb(247, 247, 247);"> if (result.bf_file == null || result.bf_file == undefilned) {  </span> </p><p>

로 비교하시면되는데

자바스크립트의 특성상

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

좀더 변형을 주면

</p><p><span style="color: rgb(51, 51, 51); font-family: 돋움, Dotum, sans-serif; font-size: 12px; background-color: rgb(247, 247, 247);"> if (!result.bf_file) {</span><span style="color: rgb(51, 51, 51); font-family: 돋움, Dotum, sans-serif; font-size: 12px; background-color: rgb(247, 247, 247);">   </span> </p><p>

로 대치할수있습니다.

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

for 문은 열씸히 돌리는데

결국 넘기는건 최종 Row 이고

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

J
Jaeuk
8년 전
[code]
bf_file:"3717237551_OtxDPMKJ_d7e68b0083f1b42c547427fae9e4ce724534bd00.jpg"
bo_subject:"익명게시판"
ca_name:"강남동"
mb_id:""
wr_1:""
wr_2:""
wr_3:""
wr_4:""
wr_5:""
[/code]

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

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

result.bf_file은 안되구요ㅠ
플래토
8년 전
@Jaeuk 님
아래 적어주신 코드에
혹시

[code]
$.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>";
}
[/code]
로 되고 끝인가요?

[code]
});
[/code]
이게 빠진건 아니죠?

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

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

for문만 제거하고 확인해보시는게 어떨까요?
J
Jaeuk
8년 전
@플래토
네ㅎ 댓글에만 누락됬습니다ㅠ 그런데 for문을 지울수가 없어요ㅠㅠ 제가 초보다 보니 코딩을 막해서

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

댓글을 작성하려면 로그인이 필요합니다.

다른것과 충돌의심 1표!

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이
8년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

J
Jaeuk
8년 전
전체코드를 보여드리기에는 너무 길고 그래서 연관된 부분을 보여드리겟습니다
<자바스크립트 부분>
$.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 출력하는건데

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인