У вас вообще серверный код странный, если не сказать более. Допустим, что это
if (isset($_POST['place_id']) && intval($_POST['place_id'])){
FavPlaces::setFavs(intval($_POST['place_id']), 'UF_FAV_PLACE');
}
еще можно трактовать как запрос без ответа, то есть что-то сделать на сервере по запросу клиента и все, а далее все ответы. Но тогда (JSON.parse на клиенте в этом случае не нужен, но нужно учесть как действует JQ при разборе json):
if (isset($_POST['action'])){
$id = (int)$_POST['place_id']; $data = null;
switch($_POST['action']){
case 'setfavplace':
if ($id) FavPlaces::setFavs($id, 'UF_FAV_PLACE');
break;
case 'getfavplace': $data = FavPlaces::getFavs();
break;
case 'setPlace':
if ($id) $data = FavPlaces::setPlace($id);
break;
case 'getPlace': $data = FavPlaces::getPlace();
}
header('Content-type: application/json');
exit(json_encode($data));
}
Если при этом данные корректны, а значит и ошибок в JSON не будет (собственно в этом случае ошибка была бы уже на сервере). У вас же ошибка указывает на то, что данные json при декодировании неожиданно закончились. Проверить нужно по самое не хочу ответ сервера.
PS. РНР при разборе принятых данных и сам сделает преобразование типов, если число будет числом, а не "числом", заниматься этим на клиенте нет смысла, вы все равно вынуждены проверить тип/преобразовать и проверить.