PHP AJAX response.status возвращает неопределенное значение

На самом деле у меня есть две проблемы: первая заключается в том, что когда я пытаюсь оценить response.status, я получаю неопределенное значение, а вторая заключается в том, что мой «$_SESSION['promo-code'] = $arr» также не создается. При вводе промокода получаю следующее:

АЯКС

    function applyPromo(){
        var promo = $("#promo-code-value").val().trim();
        console.info(promo);
        $.ajax({
            url:"get-promo.php",
            type: "POST",
            data:{ getpromo : promo},
            success: function(response){
                console.info("%j", response);
                console.info(response.status);
                if (response.status === "success"){
                    swal("Good job!!", 
                        "Promo code applied Successfully!",
                        "success"
                        ).then(() => {
                            reloadPage();
                        });
                    }else{
                    swal("Humm...", "Promo code no longervalid","error");
                    }   
                }
            })
        }

PHP

if (isset($arr)){
        //Add array to session variable 
        //** Only one code can be apply at the time . will override
        $_SESSION['promo-code'] = $arr; 
        //Success response 
        echo json_encode(array(
            'status' => 'success',
            'message'=> $arr, //For debugging only , will be replaced to success message 
        ));
    }else {
        echo json_encode(array(
            'status' => 'error',
            'message'=> 'error message'
        ));
    }

Это только для школьного проекта. Спасибо!!

Я пытался переключить «успех» на «ошибку», но он просто не оценивает. Я новичок в ajax или php, но я считаю, что видел, как другие заставляют его работать таким образом.

Код php, который вы показываете, это код, который находится внутри get-promo.php? Потому что в этом случае нет смысла запрашивать ` $arr `, когда вы передаете в публикацию get-promo, вы должны запрашивать isset($_Post['get-promo'])

Julian Fagadau 13.05.2023 23:59

Здравствуйте Джулиан. Все верно, php-код находится внутри get-promo.php. Как я уже прокомментировал, это должно было получить ответ на стороне клиента, но он будет заменен, как только я закончу.

Maxime 14.05.2023 00:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема первая в том, что ответ находится в формате JSON. Поэтому вам нужно преобразовать его в объект JS, а затем вы можете получить статус. Вот обновленный код: -

function applyPromo(){
   var promo = $("#promo-code-value").val().trim();
   console.info(promo);
    $.ajax({
      url:"get-promo.php",
      type: "POST",
      data:{ getpromo : promo},
      success: function(response){
         let response = JSON.parse(response);
         console.info("%j", response);
         console.info(response.status);
         if (response.status === "success"){
            swal("Good job!!", 
              "Promo code applied Successfully!",
              "success"
            ).then(() => {
               reloadPage();
            });
         }else{
            swal("Humm...", "Promo code no longervalid","error");
         }   
      }
    })
  }

Вторая проблема заключается в том, что вы не используете session_start(). Вот обновленный код: -

if (isset($arr)){
  //Add array to session variable 
  //** Only one code can be apply at the time . will override
  session_start();
  $_SESSION['promo-code'] = $arr; 
  //Success response 
  echo json_encode(array(
     'status' => 'success',
     'message'=> $arr, //For debugging only , will be replaced to success message 
  ));
}else {
  echo json_encode(array(
    'status' => 'error',
    'message'=> 'error message'
  ));
}

Раньше я пытался преобразовать его внутри оператора if, и это не сработало, но, поместив значение внутри переменной и переименовав его, это сработало, спасибо! Для сеанса Session_start находится внутри включения в файл. Он присутствует во всем проекте и не вызывает проблем в другом месте.

Maxime 14.05.2023 00:20

@Maxime, так что теперь у тебя проблема только с PHP?? Парсинг на стороне JavaScript работает. Верно??

Developer 14.05.2023 04:20

Для php я столкнулся с такой проблемой во время Ajax. И эта проблема возникает, потому что запрос не завершается, и поэтому сеанс не сохраняется. Но с этой проблемой я столкнулся в laravel. А позже и на WordPress. Но я их разрешил. Это было связано с тем, что запрос не был завершен.

Developer 14.05.2023 04:22

@Maxime, если у вас все еще есть проблема в сеансе PHP, прокомментируйте меня.

Developer 14.05.2023 04:23

Я попытался поместить его поверх моей переменной Session, как и вы, и теперь все работает нормально. Как ни странно, это единственный способ, которым это работает. Раньше он был внутри include(), и я даже пытался поместить свой Session_start поверх файла, но безуспешно. Еще раз спасибо!!

Maxime 14.05.2023 04:53

@Maxime Да, потому что сеанс не запускается. Бывает, истинную причину можно найти, посмотрев на код. Но я думаю, что безопасно снова поставить туда session_start. Если ваша проблема решена, пометьте правильный ответ для будущих посетителей.

Developer 14.05.2023 05:00

Другие вопросы по теме