Что бы не забыть об одной тонкости отправка JSON  через $.ajax в php  пишу я этот пост.

Чуть голову не сломал почему на windows сервере JSON после отправки обрабатывается нормально, а на линуксе пишет SYNTAX_ERROR

Логи запросов показали, что при включённых magic quotes  в JSON запросе экранируются кавычки, а json_decode не понимает это.  Да и не дело в запросах слать «чистый»  json — правильнее будет применить encodeURIComponent при отправке. Следующий пример «правильного обмена»:

JavaScript — отправитель

[cc escaped=»true» lang=»php»] var exp={‘step’:1, ‘param1’: ‘example param value’ };
$.ajax({
url: ajaxurl,
data: ({
action : ‘exportaction’,
export: encodeURIComponent(JSON.stringify(exp)) //— создали JSON строку из объекта и экранировали её спец символами для передачи через url
}),
success: function(data) { //— обрабатываем ответ
var data=$.parseJSON(data);
$(«#vkwp»).find(‘.percent’).html(data.step+’%’);
}
});
[/cc]

php скрипт — приёмник.

[cc escaped=»true» lang=»php»] $_export=urldecode($_GET[‘export’]);  //— получили из параметров запрос и преобразовали в нормальный из экраннированного url
$export = json_decode($_export);  //— преобразовали json в нормальный объект
$export->step=$export->step+1;
echo json_encode($export);  //— закодировали и отдали обратно в ajax.

[/cc]

Вот и всё.