Ответ 1
Вы можете использовать JSON.stringify(array)
для кодирования вашего массива в JavaScript, а затем использовать $array=json_decode($_POST['jsondata']);
в вашем PHP скрипт для его получения.
Скажем, у меня есть массив javascript с кучей элементов (от 50 до 200).
Я хочу отправить это на PHP (подготовленный оператор) с помощью ajax. В настоящее время я .load
php файл много раз внутри цикла, но я хочу преобразовать его в массив и отправить массив один раз, загружая файл PHP один раз вместо 50-200 раз.
array[i] = variable;
Вы можете использовать JSON.stringify(array)
для кодирования вашего массива в JavaScript, а затем использовать $array=json_decode($_POST['jsondata']);
в вашем PHP скрипт для его получения.
Запросы AJAX ничем не отличаются от запросов GET и POST, инициированных с помощью элемента <form>
. Это означает, что вы можете использовать $_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 в php-совместимый массив, который будет отправлен как параметр запроса http get:
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('&');
}
префикс - это имя параметра.
EDIT:
var a = {
one: two,
three: four
};
alert('/script.php?'+obj2url('a', a));
Произведет
/script.php?a[one]=two&a[three]=four
который позволит вам использовать $_GET ['a'] в качестве массива в script.php. Вам нужно будет указать свой путь в ваш любимый движок ajax при поставке url для вызова script.php из js.
Итак, используйте цикл на стороне клиента для создания двумерного массива ваших массивов и отправляйте всю вещь на PHP по одному запросу.
На стороне сервера вам понадобится другой цикл, который выполняет свою обычную вставку/обновление для каждого подматрица.
Вы можете передать массив из javascript в PHP...
Javascript... 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 Code... ArrayReader.php
<?php
eval('$plArray = ' . $_POST['Array'] . ';');
print_r($plArray);
?>