Program Tip

자바 스크립트 배열 전달-> PHP

programtip 2020. 12. 7. 20:33
반응형

자바 스크립트 배열 전달-> PHP


여러 요소가 포함 된 자바 스크립트 배열 (50 ~ 200 개)이 있다고 가정 해 보겠습니다.

ajax를 사용하여 PHP (준비된 문)로 보내고 싶습니다. 현재 저는 .load루프 내부에서 여러 번 php 파일을 가지고 있지만, 그것을 배열로 변환하고 배열을 한 번 보내고, PHP 파일을 50-200 번로드하는 대신 한 번로드하고 싶습니다.

array[i] = variable;


를 사용 JSON.stringify(array)하여 JavaScript로 배열을 인코딩 한 다음 $array=json_decode($_POST['jsondata']);PHP 스크립트에서 사용 하여 검색 할 수 있습니다.


AJAX 요청은 <form>요소를 통해 시작된 GET 및 POST 요청과 다르지 않습니다 . 즉, $ _GET 및 $ _POST를 사용하여 데이터를 검색 할 수 있습니다.

AJAX 요청을 할 때 (jQuery 예제) :

// JavaScript file

elements = [1, 2, 9, 15].join(',')
$.post('/test.php', {elements: elements})

이 양식을 게시하는 것과 거의 동일합니다.

<form action="/test.php" method="post">
  <input type="text" name="elements" value="1,2,9,15">
</form>

두 경우 모두 서버 측에서 $ _POST 변수의 데이터를 읽을 수 있습니다.

// test.php file

$elements = $_POST['elements'];
$elements = explode(',', $elements);

간단하게하기 위해 여기서 쉼표로 요소를 결합합니다. 하지만 JSON 직렬화는보다 보편적 인 솔루션입니다.


다음은 js 배열 또는 객체를 http get 요청 매개 변수로 전송 될 PHP 호환 배열로 변환하는 함수입니다.

function obj2url(prefix, obj) {
        var args=new Array();
        if(typeof(obj) == 'object'){
            for(var i in obj)
                args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]);
        }
        else
            args[args.length]=prefix+'='+encodeURIComponent(obj);
        return args.join('&');
    }

접두사는 매개 변수 이름입니다.

편집하다:

var a = {
    one: two,
    three: four
};

alert('/script.php?'+obj2url('a', a)); 

생산할 것이다

/script.php?a[one]=two&a[three]=four

그러면 script.php에서 $ _GET [ 'a']를 배열로 사용할 수 있습니다. js에서 script.php를 호출하는 URL을 제공 할 때 선호하는 ajax 엔진으로 들어가는 방법을 찾아야합니다.


따라서 클라이언트 측 루프를 사용하여 배열의 2 차원 배열을 만들고 한 번의 요청으로 전체를 PHP로 보냅니다.

서버 측에서는 각 하위 배열에 대해 정기적 인 삽입 / 업데이트를 수행하는 또 다른 루프가 필요합니다.


자바 스크립트에서 PHP로 배열을 전송할 수 있습니다.

자바 스크립트 ... ArraySender.html

<script language="javascript">

//its your javascript, your array can be multidimensional or associative

plArray = new Array();
plArray[1] = new Array(); plArray[1][0]='Test 1 Data'; plArray[1][1]= 'Test 1'; plArray[1][2]= new Array();
plArray[1][2][0]='Test 1 Data Dets'; plArray[1][2][1]='Test 1 Data Info'; 
plArray[2] = new Array(); plArray[2][0]='Test 2 Data'; plArray[2][1]= 'Test 2';
plArray[3] = new Array(); plArray[3][0]='Test 3 Data'; plArray[3][1]= 'Test 3'; 
plArray[4] = new Array(); plArray[4][0]='Test 4 Data'; plArray[4][1]= 'Test 4'; 
plArray[5] = new Array(); plArray[5]["Data"]='Test 5 Data'; plArray[5]["1sss"]= 'Test 5'; 

function convertJsArr2Php(JsArr){
    var Php = '';
    if (Array.isArray(JsArr)){  
        Php += 'array(';
        for (var i in JsArr){
            Php += '\'' + i + '\' => ' + convertJsArr2Php(JsArr[i]);
            if (JsArr[i] != JsArr[Object.keys(JsArr)[Object.keys(JsArr).length-1]]){
                Php += ', ';
            }
        }
        Php += ')';
        return Php;
    }
    else{
        return '\'' + JsArr + '\'';
    }
}


function ajaxPost(str, plArrayC){
    var xmlhttp;
    if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();}
    else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
    xmlhttp.open("POST",str,true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send('Array=' + plArrayC);
}

ajaxPost('ArrayReader.php',convertJsArr2Php(plArray));
</script>

그리고 PHP 코드 ... ArrayReader.php

<?php 

eval('$plArray = ' . $_POST['Array'] . ';');
print_r($plArray);

?>

참고 URL : https://stackoverflow.com/questions/5035547/pass-javascript-array-php

반응형