У вас вообще серверный код странный, если не сказать более. Допустим, что это
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, время: 02:18. |