0

Имеется такой код в контроллере Laravel:

public function put_in_favorites(Request $request)
$is_active = $request->get('is_active');      
    if ($is_active)
    {
        return 'this is true';
}
else
    {
        return 'this is false';
    }

Значение $is_active он получает из ajax-запроса:

$('.bpt-heart').on('click', function (){
        $(this).toggleClass('Active');
        let IsActive;
        if ($(this).hasClass('Active'))
        {
            IsActive = true;
        }
        else
        {
            IsActive = false;
        }
        dataId = this.getAttribute('data-id');
        // console.log(dataId);
    $.ajax({
        url: 'favorites',
        type: 'POST',
        headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
        data: {
            is_active: IsActive,
            data_id: dataId
        },
        success: function (data)
        {
            console.log(data);
        },
        error: function (err)
        {
            console.log('Error');
            console.log(err);
        }
    });
});

Однако у меня всегда возвращается this is true, хотя если возвращать $is_active он, как и требуется, меняется на true и false. Как сделать так, чтобы обрабатывались оба случая в контроллере в зависимости от переменной $is_active?

  • 1
    В дебаге проверьте, какое значение лежит в переменной непосредственно в момент проверки условий. Можете попробовать условие $is_active=== true – Sergey K. Aug 10 '22 at 13:08
  • 2
    а там не строка случайно? – qwerty Aug 10 '22 at 13:09

2 Answers2

6

Посмотрите то, что отправляется через Network в браузере. Скорее всего переменная передаётся в строком в виде. Поэтому она всегда true. Поэтому надо либо строгое сравнение делать, либо отправлять например непосредственно json либо отправлять 1/0.

https://ru.stackoverflow.com/a/701146/191482 - отладку на стороне сервера сделать тоже очень полезно

0

Вот решение:

if ($is_active == 'true')

он её воспринимает в строковом виде. Всем спасибо за ответы.