将JSON jQuery Ajax发送到PHP并返回

时间:2010-08-11 20:13:08

标签: php jquery ajax json

我在通过Ajax将JSON jQuery数组发送到PHP脚本时遇到问题。这有什么问题:

var tee = $('#voting_image img').attr('id');
var vote = 1;
var thing = {tee: tee, vote: vote};
var encoded = $.toJSON(thing);

$.ajax({
    url:             '/vote_save.php',
    type:            'POST',
    dataType:        'json',
    data:            'vote='+encoded,
    success: function(data)
    {
        var back = $.evalJSON(data).name;
        $('#voting_hint_name').html(back);
        $('#voting_buttons').html('<div id="voting_buttons"><a href="#" id="vote_yes">PRINT IT</a><a href="#" id="vote_no">DON\'T PRINT IT</a></div>');
    },
    error:function ()
    {
        $('#voting_buttons').html('<div id="voting_buttons"><a href="#" id="vote_yes">PRINT IT</a><a href="#" id="vote_no">DON\'T PRINT IT</a></div>');
        alert("There was a problem, your vote was not saved, please try again!");
    }
});

这是PHP

if (isset($_POST['vote'])&&isset($_SESSION['user']))
{
    $tee_data = json_decode($_POST['vote']);
    $the_tee = $tee_data['tee'];
    $responce = array('name'=> 'Alex Wow', 'test'=> '1');
    echo json_encode($responce);
}
else {
    echo "error";
}

我在Firebug中遇到的错误是:

  

错误:JSON.parse

4 个答案:

答案 0 :(得分:0)

AFAIK,jQuery中没有$.toJSON方法,你可能正在寻找$.parseJSON,而且你已经在这里创建了JSON:

var thing = {tee: tee, vote: vote};

答案 1 :(得分:0)

我认为问题是您将数据作为对象发送,尝试作为数组发送 var thing = {tee: tee, vote: vote};到数组

答案 2 :(得分:0)

查看此问题:Serializing to JSON in jQuery

接受的答案链接到John Resig(jQuery的创建者)推荐的JSON序列化插件。它并没有真正解决您的具体错误,但也许使用该插件将帮助您获得稳定的解决方案。

简单地看一下,如果您使用该插件,则会显示您将替换此行:

var encoded = $.toJSON(thing);

用这个:

var encoded = JSON.stringify(thing); 

希望有所帮助!

答案 3 :(得分:0)

感谢您的回复,我选择了:

$.getJSON(
            '/vote_save.php?vote='+encoded,
            function(data) 
            {
                $('#voting_hint_name').html(data.bob);
                $('#voting_buttons').html('<div id="voting_buttons"><a href="#" id="vote_yes">PRINT IT</a><a href="#" id="vote_no">DON\'T PRINT IT</a></div>');
            }   
    );

而不是$ .ajax,它起作用了。