хорошо, так что это действительно очень распространенная проблема. Неясно, что вы не можете просто отправить массив как есть из javascript в PHP и распознать его.
Проблема в том, что PHP не знает, как читать множественные значения из запроса POST - обычно такие вещи требуют, чтобы автор PHP использовал такие скобки, как: varname[]
.
Итак, в основном вы должны отправлять переменные в виде строк. Используя JSON, вы можете отправлять даже сложные объекты в виде строк в PHP, используя одно имя переменной. Обычно вы используете JSON.stringify или что-то в этом роде, но если у вас есть простой массив, он может даже не понадобиться.
Вот полный пример проблемы / решения, найденной с использованием jquery и $ .post:
Предположим, у вас есть файл myurl.php :
<?php
print_r($_POST);
?>
А в отдельном файле (или консоли) вы попробуйте:
var myarray = Array('some','elements','etc');
var mydata = {postvar1: 'string', postvar2: myarray};
$.post('myurl.php', mydata, function(response) {
alert("response: " + response);
});
Это не работает! В результате postvar2 содержит только "etc".
Решением является принудительное преобразование массива в строку JSON, которую можно декодировать из PHP.
var myarray = Array('some','elements','etc');
var json_array = $.map(myarray,function(n) {
return '"'+n+'"';
});
var mydata = {postvar1: 'string', postvar2: '['+json_array+']' };
$.post('myurl.php', mydata, function(response) {
alert("response: " + response);
});
На стороне PHP вы теперь должны использовать: json_decode($_POST['myarray']);
, чтобы получить результаты в правильном массиве.
Обратите внимание, в этом примере предполагается, что в вашем массиве очень простые строки или числа. Если у вас есть сложные объекты, вам нужно использовать функцию JSON.stringify, которая позаботится о дополнительных кавычках, экранировании специальных символов и т. Д.