Невозможно получить размещенный массив из jQuery - PullRequest
0 голосов
/ 08 мая 2009

Я пытаюсь опубликовать группу массивов с помощью метода 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" ??

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

хорошо, так что это действительно очень распространенная проблема. Неясно, что вы не можете просто отправить массив как есть из 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, которая позаботится о дополнительных кавычках, экранировании специальных символов и т. Д.

0 голосов
/ 08 мая 2009

Не уверен, понял ли я вопрос, но не получится ли что-то вроде этой работы

if (isset($_POST['batchArr'])) {
   $batchArr = $_POST['batchArr'];
   // Then populate your html here e.g
   echo $batchArr[0];

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...