자바 스크립트 배열 전달-> 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
'Program Tip' 카테고리의 다른 글
프로그래밍 방식으로 릴리스 / 디버그 모드 감지 (.NET) (0) | 2020.12.07 |
---|---|
Python에서 TeX를 사용하여 matplotlib 레이블에 개행 문자를 넣습니까? (0) | 2020.12.07 |
단일 gcc 명령으로 검색 경로에 여러 헤더 포함 및 라이브러리 디렉토리를 추가하는 방법은 무엇입니까? (0) | 2020.12.07 |
Android 체크 가능 메뉴 항목 (0) | 2020.12.07 |
실수로 마스터로 되돌리고 커밋되지 않은 변경 사항 손실 (0) | 2020.12.07 |