Можете ли вы иметь переменную PHP $ _POST, которая установлена ​​в массив? - PullRequest
3 голосов
/ 29 мая 2011

Я использую AJAX, чтобы поместить некоторые данные в мою базу данных.Я использую JSON для отправки данных на страницу PHP.Я использую запрос POST.Можете ли вы установить одну из переменных POST в виде массива?Ниже у меня есть полный AJAX-запрос, но здесь есть часть, где я устанавливаю две части данных как массивы:

"content[]" : testContentArray,
"content_attr[]" : testContentAttributes,

Ниже приведен мой полный AJAX (с использованием jQuery):

$.ajax({
                type: "POST",
                url: "../includes/create_test_main.ajax.php",
                data:   {"tags" : $('#testTags').val(),
                                         "title" : $('#testTitle').val(),
                                         "subject" : $('#testSubject').val(),
                                         "description" : $('#testDescription').val(),
                                         "content[]" : testContentArray,
                                         "content_attr[]" : testContentAttributes,
                                         "user_id" : user_id},
                success: 

                                     function(testId) {//redirect Page
                                        window.location.href = "http://localhost/nvr_forget/public_html/test/" + testId + "/";
                                     }
            });
        };

Если это способ сделать это, как бы я справился с этим на стороне PHP?обрабатывать переменную $ _POST как обычный массив?

Ответы [ 4 ]

3 голосов
/ 29 мая 2011

Когда вы передаете массив в объекте data в $.ajax, он анализируется в формате name[]=value.Это делается с использованием $.param, поэтому я проиллюстрирую это следующим образом:

jQuery.param({'foo': [1, 2, 5]})
// "foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=5"

%5B и %5D - квадратные скобки с кодировкой uri.Это распространенный способ отправки нескольких значений одного и того же ключа на сервер.PHP анализирует его в массив, поэтому в этом случае:

var_export($_POST['foo']);
// array ('1', '2', '5')

Итак, в вашем коде $_POST['content'] и $_POST['content_attr'] должны быть массивами.Квадратные скобки, которые вы использовали, не нужны, но ничего не сломают.

См. Руководство по PHP по теме .

0 голосов
/ 29 мая 2011

Возможно, вы можете сделать это, но вы должны сделать это полностью вручную, например так:

{
    "content[0]": "a",
    "content[1]": "b",
    "content[2]": "c",
    "content[multi][0]": "d"
}

$_POST['content'] будет выглядеть следующим образом:

Array(
    0 => "a",
    1 => "b",
    2 => "c",
    multi => Array(
        0 => "d"
    )
)

Это будетнамного проще просто:

{
    "blob" : JSON.stringify(data_or_array_or_whatever)
}

В PHP вы можете затем извлечь его следующим образом:

$data = json_decode($_POST['blob'], true);

Для этого требуется библиотека json2.js для старых браузеров.

Я бы выбрал второе, так как в первом случае вы, вероятно, напишите свой собственный сериализатор: P - именно поэтому у нас есть JSON.

0 голосов
/ 29 мая 2011

Вы можете опубликовать объект из JS (JSON) и json_decode на сервере (PHP) с помощью json_decode.

0 голосов
/ 29 мая 2011

Конечно, вы можете - это может быть простой массив (с целыми числами в качестве ключей) или ассоциативный массив.Это зависит только от того, какой JSON-объект вы отправляете.

Например, если вы отправляете следующий JSON-объект:

var data = {
    'a': 'test123',
    'b': [
        'x',
        'y',
        'z'
    ],
    'c': {
        'testing': 'abc',
        'blah': 'qwerty'
    }
}

У вас будут следующие элементы в $_POST:

  • $_POST['a'] - содержит строку test123,
  • $_POST['b'] - содержит массив (array('x','y','z')),
  • $_POST['c'] - также содержит массив, но ассоциативный (array('testing'=>'abc','blah'=>'qwerty')),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...