ajax 다중 리턴값 오류... 좀 어렵습니다 ㅜㅜ
본문
<?php
include_once "./_common.php";
$submit_id = $_POST['submit_id'];
$test = $_POST['test'];
$sql = "update g5_submit set checking = '$test' where submit_id = '$submit_id' ";
$result = sql_query($sql);
$sql2 = "select * from g5_submit where submit_id = '$submit_id' ";
$result2 = sql_fetch($sql2);
if($result2['checking'] == 1){
echo "검토완료";
}
else echo "검토중";
?>
이건 ajax로 호출한 php이고
<div>검토:
<label class="switch">
<?php if($row['checking'] == 1) {
$checked = "checked";
} else {
$checked = "";
}
?>
<input type="checkbox" class="checkBoxId" value="<?php echo $row['submit_id']; ?>" <?php echo $checked; ?>>
<span class="slider round"></span>
</label>
</div>
<?php if($row['checking'] == 1) { ?>
<span id="result<?php echo $row['submit_id']; ?>">검토완료</span>
<?php } else { ?>
<span id="result<?php echo $row['submit_id']; ?>">검토중</span>
<?php } ?>
<div id="result_div<?php echo $row['submit_id']; ?>">
<?php if($row['checking'] == 0) { ?>
<button>거절하기</button>
<?php } ?>
</div>
<script>
$(function() {
$(".checkBoxId").change(function() {
var param="";
var value = $(this).val();
var aa = "#result";
var result_span = aa.concat(value);
if($(this).is(":checked")) {
this.param = 1;
} else {
this.param = 0;
}
$.ajax({
url : "http://suyong0507.dothome.co.kr/bbs/checking.php",
type : "post",
data : {
submit_id : value,
test : this.param
},
success : function(res) {
if(res) {
$(result_span).text(res);
}
}
});
});
});
</script>
본문입니다.
원래 코드입니다. ajax 리턴값이 하나죠(echo)
여기서 $result2['checking'] == 0일때 '검토중'과 함께
다른 div인, <div id="result_div<?php echo $row['submit_id']; ?>"></div>에
<button>거절하기</button> 라는 코드를 같이 리턴시키고 싶어서 검색하고 아래 링크처럼 했습니다.
다중 리턴값을 주기 위해서 배열을 활용했죠.
https://stackoverflow.com/questions/4594265/multiple-return-values-from-php-with-jquery-ajax/4594337
<div>검토:
<label class="switch">
<?php if($row['checking'] == 1) {
$checked = "checked";
} else {
$checked = "";
}
?>
<input type="checkbox" class="checkBoxId" value="<?php echo $row['submit_id']; ?>" <?php echo $checked; ?>>
<span class="slider round"></span>
</label>
</div>
<?php if($row['checking'] == 1) { ?>
<span id="result<?php echo $row['submit_id']; ?>">검토완료</span>
<?php } else { ?>
<span id="result<?php echo $row['submit_id']; ?>">검토중</span>
<?php } ?>
<div id="result_div<?php echo $row['submit_id']; ?>">
<?php if($row['checking'] == 0) { ?>
<button>거절하기</button>
<?php } ?>
</div>
<script>
$(function() {
$(".checkBoxId").change(function() {
var param="";
var value = $(this).val();
var aa = "#result";
var result_span = aa.concat(value);
if($(this).is(":checked")) {
this.param = 1;
} else {
this.param = 0;
}
$.ajax({
url : "http://suyong0507.dothome.co.kr/bbs/checking.php",
type : "post",
data : {
submit_id : value,
test : this.param
},
success : function(res) {
if(res) {
$(#result_span).text(res.aaa);
$(#result_div).html(res.ccc);
}
}
</script>
<?php
include_once "./_common.php";
$submit_id = $_POST['submit_id'];
$test = $_POST['test'];
$sql = "update g5_submit set checking = '$test' where submit_id = '$submit_id' ";
$result = sql_query($sql);
$sql2 = "select * from g5_submit where submit_id = '$submit_id' ";
$result2 = sql_fetch($sql2);
if($result2['checking'] == 1) {
echo json_encode(array("aaa" => "검토완료", "ccc" => ""));
}
else if(result2['checking'] == 0){
echo json_encode(array("aaa" => "검토중", "ccc" => "<div><button>거절하기</button></div>"));
}
?>
1. 코드에 틀린부분이 있나요?
(기존코드는 잘됬습니다)
2. json_encode을 반드시 써야되나요?
검토상태 바꾸는 체크박스는 아예 작동조차 안하네요...
코드가 좀 복잡할거 같은데 한번씩 봐주셔서 감사합니다 ㅜㅜ
기존 코드는 잘됬었습니다...
!-->!-->!-->!-->
답변 3
배열로 넘기는것이면 json을 활용하는것이 맞습니다 json_encode로 php에선 넘기고
ajax에선 dataType: "json" 선언을 해주세요 그래야 json데이터를 정상적으로 받을수있습니다
success : function(res) {
if(res) {
$(result_span).text(res.aaa);
$('#result_div' + value).html(res.ccc);
}
}
저도 하남시불빠따님 같은 상황인데 dataType: "json"하고 "
aaa"=>"bbb" 이런식으로 붙여쓰기까지 했는데 내부서버 오류라고 500이 뜨네요..
그래서 혹시 몰라서
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
를 붙였는데 에러는 사라지고 데이터는 안넘어오네요.. (계속 'data 없음'이라는 alert만 떠요..)