더보기버튼 오류가 납니다.. 채택완료
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 로 확인하셔야 맞는거 같네요
즉, 오류가 난다고 하는 부분을(다른 로직오류가 없다는 가정하에)
</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개
아래 적어주신 코드에
혹시
[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문만 제거하고 확인해보시는게 어떨까요?
네ㅎ 댓글에만 누락됬습니다ㅠ 그런데 for문을 지울수가 없어요ㅠㅠ 제가 초보다 보니 코딩을 막해서
for문안에 많은게 들어가 있어서요 ㅠㅠ 더보기 버튼이다 보니 처음에는 10개를 출력하고
그다음부터 10개를 출력해주는 for문입니다. 그 for문으로 ajax로 받아온 result를 $().appendTo 로 10개를 찍어내는 거죠 ㅠㅠ 다른건 다괜찮은데 저 bf_file에만 빨간줄이 생겨버려요ㅠㅠ bf_file이 사진출력하는건데 막상 사진은 잘나오는데 말이죠ㅠㅠ
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
<자바스크립트 부분>
$.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 출력하는건데
더 필요한 부분이 있으면 말씀해주세요..
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
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은 안되구요ㅠ