Я хотел бы отправить данные, используя $ .ajax, как это:

$.ajax({'url': 'my.php',
        'type': 'POST',
        'data': arr,
        'success': function(response) {
                      alert(response);
                   }
});

Проблема в том, что arr является ассоциативным массивом, который выглядит следующим образом:

arr['description_0'] = 'very nice picture!';
arr['tags_0'] = 'David "Nice Picture" 2010';
arr['description_1'] = 'In the pool';
arr['tags_1'] = '"April 2010" Australia';
    .                    .
    .                    .
    .                    .

Если my.php выглядит так:

<?php
echo count($_POST);
?>

response равен 0.

Но если я изменю

'data': arr,

К

'data': 'a=chess&b=checkers',

response равен 2, как и ожидалось.

Во что я должен преобразовать arr, чтобы данные были отправлены правильно?

0
Misha Moroshko 3 Авг 2010 в 06:02

4 ответа

Лучший ответ

Если у вас действительно возникают проблемы, попробуйте прочитать $.param().


Кроме того, я обнаружил, как вы инициализировали переменную arr?

Вы должны инициализировать его как var arr = {};, а затем передать его как 'data': arr,. Попробуйте взглянуть на инструменты разработчика firebug или webket, чтобы увидеть, какие данные post отправляются на сервер.

3
Reigel 3 Авг 2010 в 03:56

У меня просто была та же проблема, и вот решение, не упомянутое в комментариях:

$.ajax({
       'url': 'my.php',
            'type': 'POST',
            'data': {
                id: 1792,
                arr[description_0] : 'very nice picture!', // DON'T quote the array key
                arr[tags_0] = 'David "Nice Picture" 2010',
             },
            'success': function(response) {
                 alert(response);
            }
    });
0
d.raev 28 Фев 2014 в 12:55

Другой вариант - сериализация в JSON и десериализация JSON на сервере:

http://code.google.com/p/jquery-json/

Данные: $ .toJSON (обр.)

Примечание. Вам не нужно заключать в кавычки ключи в $ .ajax ({url: ..., data: ...})

Также вы должны действительно использовать объект, поскольку в JavaScript нет ассоциативного массива. Массивы JavaScript предназначены для использования числовых «ключей».

-1
johans 3 Авг 2010 в 03:51

Данные AJAX на самом деле являются обычным GET или POST-запросом, выполняемым Javascript «в молчании». Таким образом, данные должны быть сформированы как обычный GET или POST, что означает, что они должны быть в формате key=value. Ваш 'data' = arr является значением, но не имеет ключа, поэтому PHP не может назначить его автоматически $ _POST. Что касается PHP, он просто получает длинную строку текста.

Вы можете получить данные, прочитав $ HTTP POST RAW DATA, если ваш PHP настроен на это, или через $data = file_get_contents('php://input');.

0
Marc B 3 Авг 2010 в 04:17