У вас вообще серверный код странный, если не сказать более. Допустим, что это
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. РНР при разборе принятых данных и сам сделает преобразование типов, если число будет числом, а не "числом", заниматься этим на клиенте нет смысла, вы все равно вынуждены проверить тип/преобразовать и проверить. |
laimas, если в файле actions.php сделать так
if (isset($_POST['action'])) { switch ($_POST['action']) { case 'setfavplace': if (isset($_POST['place_id'])) { FavPlaces::setFavs($_POST['place_id'], 'UF_FAV_PLACE'); } break; case 'getfavplace': echo json_encode(FavPlaces::getFavs()); break; case 'setPlace': if (isset($_POST['place_id'])) { echo json_encode(FavPlaces::setPlace($_POST['place_id'])); echo "<pre>" .print_r($_POST,1)."</pre>"; } break; case 'getPlace': echo json_encode(FavPlaces::getPlace()); break; } } Тогда при клике на кнопку "Выбрать" в консоли ошибка "Unexpected token < in JSON at position 4" Результат: [action] => setPlace [place_id] => NaN |
Цитата:
У вас в РНР коде куча дублированной писанины. |
Цитата:
|
laimas, если сделать так:
let val = $('.place_sections_block input[name="fio"]').val(); let val1 = $('.place_elements input[name="city"]').val(); Тогда в консоли ошибок нет. Подскажите, а как можно оба поля поместить в одну переменную (например в val)? |
Цитата:
1) именовать ключ как элемент массива, то есть - data: 'action=setPlace&place_id[]='+val+'&place_id[]='+val1 2) передать под одним ключом как json, то есть - data: {action: 'setPlace', place_id: JSON.stringify(arr)}, где arr массив значений (можно и ручками прописать json для двух значений) На сервере в первом случае под ключом place_id будет массив из двух значений, во втором случае json, который декодировать и получить массив. PS. Вы шлете на сервер непотребное и при этом удаляете на нем проверку. Логика странная, тем более что странности есть и вообще в логике приема/ответа. |
laimas,
$(document).ready(function(){ $('.place_sections').on('change', function(){ var val = $(this).val(); }); $('.placeChoose').on('click', function(){ let name = $('.place_sections_block input[name="name"]').val(); let val = $('.place_elements input[name="city"]').val(); $.ajax({ type: 'POST', url: '/ajax/actions.php', data: {action: 'setPlace', 'place_id[]': name, 'place_id[]': val}, success: function(data){ var result = JSON.parse(data); console.log(data);//true if (result){ whenPlaceChoosen(name); //custom.js } } }) }); }); В консоли отображаются результаты заполненных полей, но после нажатия на "Выбрать" в файле custom.js console.log(data) приходит значение ["226"]. Хотя в поля вводились значения "ФИО" и "Город" window.getFavPlaces = function(){ ajaxAction({action:'getfavplace'}, function(data){ console.log(data);// приходит 226 data = JSON.parse(data); if (Array.isArray.call(null, data)) { data.forEach(function(item){ if ($('.js_favorite.js_favin[data-id_place=' + item + ']').length){ $('.js_favorite.js_favin[data-id_place=' + item + ']').addClass('active'); $('.js_favorite.js_favto[data-id_place=' + item + ']').removeClass('active'); } }); } }); } Явно что-то делаю не так... |
Цитата:
data: 'action=setPlace&place_id[]='+val+'&place_id[]='+val1 |
Часовой пояс GMT +3, время: 07:06. |