Нужна помощь с функцией $ .ajax - Как отправить ассоциативный массив? - PullRequest
0 голосов
/ 03 августа 2010

Я хотел бы отправить данные, используя $ .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, чтобы данные были отправлены правильно?

Ответы [ 4 ]

3 голосов
/ 03 августа 2010

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


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

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

0 голосов
/ 28 февраля 2014

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

$.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 голосов
/ 03 августа 2010

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 голосов
/ 03 августа 2010

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

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

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

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

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

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