PHP AJAX 배열 넘기고 받기
본문
안녕하세요. 현재 PHP에서 AJAX를 이용하여 배열을 넘기고 받는 코드를 작성중입니다.
수량을 입력한 후에 오른쪽 하단의 초록색 버튼을 넘기면 수량들을 배열로 잡아서 넘기고 있습니다.
배열을 넘기는 코드는 다음과 같습니다.
<script>
$(document).ready(function(){
$('#insert_form').on('submit',function(event){
event.preventDefault();
var dataArr = new Array(); // 배열 선언
var $cnts = $('.cnt'); // 상단에 <input type="number" name="productQuantity" id="productQuantity" value="0" min = "0" class="cnt form-control" /> 있고, class의 cnt를 가져왔습니다.
for (var i = 0; i < $cnts.length; i++) {
dataArr.push($cnts.eq(i).val()); // 배열에 넣어주기
}
console.log(dataArr); // console창 출력
$.ajax({
url:"index_registration2_Out_insert.php",
method:"POST",
traditional:true,
data : {
dataArr:dataArr
},
success:function(data){
$('#insert_form')[0].reset();
$('#product_table').html(data);
}
})
});
});
</script>
위와 같이 작성해준 후에 버튼을 클릭하면 콘솔창에는 배열에 잘 추가된 것을 확인할 수 있습니다.
(첫번째 숫자와 마지막 숫자만 변경했습니다)
이제 이 넘긴 배열을 받는 코드입니다.
<?php
if(!empty($_POST)){
$output = '';
error_reporting(E_ALL);
ini_set('display_errors', '1');
// DB 정보는 지우겠습니다.
$DB_IP = "";
$DB_ID = "";
$DB_PWD = "";
$DB_NAME = "";
$DB_ConnectInfo = array("UID"=>$DB_ID, "PWD"=>$DB_PWD, "Database"=>$DB_NAME, "CharacterSet" => "UTF-8");
date_default_timezone_set('Asia/Seoul');
$connect = sqlsrv_connect($DB_IP, $DB_ConnectInfo);
$dataArr = $_POST['dataArr'];
print_r($dataArr);
print_r($_REQUEST);
}
?>
저는 모든 배열이 다 출력되게끔 하고싶은데 위와 같이 마지막 숫자만 출력됩니다.
(마지막 숫자를 변경하지 않고 0으로 넘기면 0이 출력됩니다.)
for문을 써주는건가 싶어서 for문 써주니까 500에러가 발생하더군요.
혹시 넘긴 배열을 모두 받아와서 출력하는 방법이 없을까요?
감사합니다.
!-->!-->답변 4
아마 ajax가 비동기라 그런거 같아요
promise나 async / await을 쓰는건 어떨까요?
promise resovle (데이터를 담은 array) 이렇게 넣어주고
promise.then (()=>{
출력
})
근데 ajax자체에서 then을 쓸 수 있지 않을까싶은데 굳이 저걸 안써도
혹시나 써야되면
var 변수 = new Promise(function(resolve){
ajax 후
var array= []
array .push(ajax의 에서 뽑힌 데이터 )
resolve (array)
})
변수.then(()=>{
출력
})
<?php
echo print_r( $_POST);
// 하셔서 어떻식으로 값들이 넘어 오는지 확인해 보세요.
if(!empty($_POST)){
$output = '';
for문 안에 ajax를 넣어주니까 배열 모두 넘어가는것을 방금 확인했습니다.ㅎㅎ
<===넘길값이 10개라고 한다면 10번 ajax실행 ==> 디비쿼리 화일 10번 호출
이것은 작동 한다고 프로그래밍이 아니라 그냥 어거지라 할 수 있습니다
다음 처럼 하세요
받는 php쪽에서는 $_POST['data'][0], $_POST['data'][1],.......과 같이 됩니다
$('#insert_form').on('submit',function(event){
var dataArr = new FormData();
$('.cnt').each(function() {
dataArr.append( "data[]", $(this).val() );
});
$.ajax({
url:"index_registration2_Out_insert.php", method:"POST",
data : dataArr, processData: false, contentType: false,
success:function(data){ alert(data)
php와 javascript 배열은 호환되지 않는 걸로 알고 있습니다.
json으로 넘기고 받아보세요.