У меня возникли проблемы с отправкой массива JSON jQuery через Ajax в 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
$.toJSON
в jQuery нет метода $.toJSON
, вы, вероятно, ищете $.parseJSON
и, кстати, вы уже создаете JSON здесь:
var thing = {tee: tee, vote: vote};
Я думаю, проблема в том, что вы отправляете данные как объект, пытаетесь отправить в качестве массива var thing = {tee: tee, vote: vote};
массив
Проверьте этот вопрос: Сериализация JSON в jQuery
Принятый ответ ссылается на плагин JSON для сериализации, рекомендованный Джоном Ресигом (создателем jQuery). Это действительно не касается вашей конкретной ошибки, но, возможно, использование этого плагина поможет вам прийти к стабильному решению.
Если взглянуть на это кратко, если вы используете этот подключаемый модуль, похоже, вы заменили бы эту строку следующим образом:
var encoded = $.toJSON(thing);
с этим:
var encoded = JSON.stringify(thing);
Надеюсь, это поможет!
Спасибо за ваши ответы, я пошел с:
$.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, и это сработало.