使用Jquery.post()无法发布JSON对象

时间:2010-10-11 03:48:08

标签: php jquery ajax json post

我在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脚本的结果只是一个空数组。我认为这是对象构建方式的问题,但我不确定,并且无法找到解决方法。

提前致谢。

2 个答案:

答案 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);
        }
    });