Я пытаюсь опубликовать группу массивов, используя метод jQuery post, но мне трудно получить значение массивов. Как я могу получить значения массива, который я отправил? Если бы кто-нибудь мог мне помочь, я был бы благодарен …
Вот что я сделал:
$(document).ready( function() { $("#submit_info").click ( function() { var batchArr= new Array(); batchArr=arrPush('batch'); var facultyArr= new Array(); facultyArr=arrPush('faculty'); var levelArr= new Array(); levelArr=arrPush('level'); var sectionArr= new Array(); sectionArr=arrPush('section'); var shiftArr= new Array(); shiftArr=arrPush('shift'); $.post("server_side/college_info_insert.php",{ batchArr:batchArr, facultyArr:facultyArr, levelArr:levelArr, sectionArr:sectionArr, shiftArr:shiftArr }, function(data) { alert(data); }); } ); function arrPush(opt) { var Arr= new Array(); Arr.push($("#"+opt+"_1").val()); var count= $("#"+opt).val(); var i=0; for(i;i<=count;i++) { if(i==0) { Arr.push($("#txt"+opt).val()); } else { Arr.push($("#txt"+opt+i).val()); } } return Arr; } } );
Как я могу получить значения массива на следующей странице «college_info_insert.php»?
хорошо, так что это действительно очень распространенная проблема. Непонятно, что вы не можете просто отправить массив as-is из 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 содержит только «и т. Д.».
Решение заключается в том, что массив превращается в строку 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, которая позаботится о дополнительных кавычках, экранах специальных символов и т. Д.
Не уверен, понял ли я этот вопрос, но не хотел бы, чтобы эта работа
if (isset($_POST['batchArr'])) { $batchArr = $_POST['batchArr']; // Then populate your html here eg echo $batchArr[0];
}