Не могу опубликовать объект JSON с помощью Jquery.post () - PullRequest
2 голосов
/ 11 октября 2010

У меня есть следующий объект, который создается в моем приложении javascript.

    poll_data[active_question] = {
        'question': $('div.question_wrap textarea').attr('value'),
        'answers':  [
            $('div.answer_wrap input#0').attr('value'),
            $('div.answer_wrap input#1').attr('value'),
            $('div.answer_wrap input#2').attr('value'),
            $('div.answer_wrap input#3').attr('value'),
            $('div.answer_wrap input#4').attr('value'),
            $('div.answer_wrap input#5').attr('value')
        ]
    };

active_question имеет значение 'poll', 0, 1, 2, 3, 4 или 5, в зависимости от вопросаработал на данный момент.Я пытаюсь опубликовать этот объект в php-скрипте, используя следующий код JS.

    $.ajax({
        url:            '/somewebsite/poll/create?json=show',
        type:           'POST',
        // dataType:        'json',
        data:           poll_data,
        contentType:        'application/json; charset=utf-8',
        success:        function(data) {
            alert(data);
        }
    });

Мой код PHP очень прост.

    echo json_encode($_POST); exit;

Когда я запускаю скрипт и нажимаюКнопка, которая запускает отправку данных, я получаю предупреждение (так что действительный код Ajax работает), но результат от моего PHP-скрипта - просто пустой массив.Я думаю, что это проблема способа создания объекта, но я не уверен и не смог найти обходной путь.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Хорошо, несколько вещей:

poll_data не является допустимым объектом JSON. Вы должны будете использовать poll_data [active_question], который является допустимым объектом JSON. JQuery должен сериализовать это правильно. Удалите contentType - я вполне уверен, что это для php (не положительный), но ваш код не будет работать для меня, пока я не удалил его. Наконец, добавление json = show в строку запроса ничего не делает .. оно просто будет проигнорировано.

Пара мелких вещей: вы можете использовать .val() вместо .attr('value'), и вы изучили .serialize(), чтобы создать ваши данные для вас?

0 голосов
/ 11 октября 2010

сделать это на сервере

$data;
$data->question=$_POST['question']
$data->answer=$_POST['answers']
echo json_encode($data);

сделать это для ajax-запроса

 $.ajax({
        url: '/somewebsite/poll/create?json=show',
        type:'POST',
        //modified data proprty
        data:poll_data[active_question],
        success: function(data) {
            alert(data);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...