У меня есть следующий объект, который создается в моем приложении 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-скрипта – это просто пустой массив. Я думаю, что это проблема с тем, как объект построен, но я не уверен, и не смог найти работу.
Заранее спасибо.
Хорошо, несколько вещей:
poll_data не является допустимым объектом JSON. Вам нужно будет использовать poll_data [active_question], который является допустимым объектом JSON. jQuery должен сериализовать это правильно. Удалите contentType – я уверен, что это для php (не положительно), но ваш код не будет работать для меня, пока я не удалю его. Наконец, добавление json = show в строку запроса ничего не делает … это просто будет проигнорировано.
Пара второстепенных вещей: вы можете использовать .val()
вместо .attr('value')
, и просмотрели ли вы .serialize()
чтобы создать свои данные для вас?
делать это на сервере
$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); } });