我在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,具体取决于当前正在处理的问题。我试图使用以下JS代码将此对象发布到php脚本。
$.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脚本的结果只是一个空数组。我认为这是对象构建方式的问题,但我不确定,并且无法找到解决方法。
提前致谢。
答案 0 :(得分:1)
好的,有些事情:
poll_data不是有效的JSON对象。您必须使用poll_data [active_question],它是一个有效的JSON对象。 jQuery应该正确序列化。删除contentType - 我很确定这是针对php(不是肯定的),但是在我删除它之前你的代码对我不起作用。最后,将json = show追加到查询字符串中没有做任何事情......只会被忽略。
还有一些小问题:您可以使用.val()
代替.attr('value')
,并且您是否考虑过.serialize()
为您创建发布数据?
答案 1 :(得分:0)
在服务器上执行此操作
$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);
}
});