PHP AJAX 배열 넘기고 받기

PHP AJAX 배열 넘기고 받기

QA

PHP AJAX 배열 넘기고 받기

본문

안녕하세요. 현재 PHP에서 AJAX를 이용하여 배열을 넘기고 받는 코드를 작성중입니다.

 

1935365004_1657590649.409.png

 

수량을 입력한 후에 오른쪽 하단의 초록색 버튼을 넘기면 수량들을 배열로 잡아서 넘기고 있습니다.

 

 

배열을 넘기는 코드는 다음과 같습니다.

 


<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>

 

위와 같이 작성해준 후에 버튼을 클릭하면 콘솔창에는 배열에 잘 추가된 것을 확인할 수 있습니다.

(첫번째 숫자와 마지막 숫자만 변경했습니다)

1935365004_1657590776.9501.png

 

이제 이 넘긴 배열을 받는 코드입니다.

 


<?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);
}
?>

 

1935365004_1657590911.2752.png

 

저는 모든 배열이 다 출력되게끔 하고싶은데 위와 같이 마지막 숫자만 출력됩니다.

(마지막 숫자를 변경하지 않고 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 = '';

안녕하세요. 우선 도와주셔서 감사합니다.
처음 화면에서 첫번째 숫자에 10, 마지막 숫자에 50을 넣고서 말씀하신대로 if문 전에  print_r($_POST) 넣어봤더니
Array ( [dataArr] => 50 ) 1
이렇게만 출력됐습니다! 마지막 숫자만 받아오는 것 같습니다..ㅜ

$.ajax({
            url:"index_registration2_Out_insert.php",
            method:"POST",
            traditional:true,
            data : {
                dataArr:dataArr
            },
==
여기서 data 부분을 다시 작성하셔야 될 듯합니다.

https://stackoverflow.com/questions/16104078/appending-array-to-formdata-and-send-via-ajax
참고하세요.

넵 도와주셔서 감사합니다!
알려주신 방법대로도 해보고, 혹시 for문 써보면 괜찮지않을까 싶어서 for문 안에 ajax를 넣어주니까 배열 모두 넘어가는것을 방금 확인했습니다.ㅎㅎ

for(var i = 0; i < dataArr.length; i++){
            (function(i) {
                $.ajax ({
                    type:"POST",
                    url:"index_registration2_Out_insert.php",
                    async: false,
                    data : {
                        dataArr:dataArr
                    },
                    success:function(data) {
                        console.log(data);
                    },
                    error: function (xhr, status, error) {
                        console.log(xhr + status + error);
                    }
                });
            })(i);
        }

항상 도움주셔서 감사합니다!

 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)

 

 

 

 

 

 

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

회원로그인

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