На самом деле у меня есть две проблемы: первая заключается в том, что когда я пытаюсь оценить 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. Как я уже прокомментировал, это должно было получить ответ на стороне клиента, но он будет заменен, как только я закончу.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема первая в том, что ответ находится в формате 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, так что теперь у тебя проблема только с PHP?? Парсинг на стороне JavaScript работает. Верно??
Для php я столкнулся с такой проблемой во время Ajax. И эта проблема возникает, потому что запрос не завершается, и поэтому сеанс не сохраняется. Но с этой проблемой я столкнулся в laravel. А позже и на WordPress. Но я их разрешил. Это было связано с тем, что запрос не был завершен.
@Maxime, если у вас все еще есть проблема в сеансе PHP, прокомментируйте меня.
Я попытался поместить его поверх моей переменной Session, как и вы, и теперь все работает нормально. Как ни странно, это единственный способ, которым это работает. Раньше он был внутри include(), и я даже пытался поместить свой Session_start поверх файла, но безуспешно. Еще раз спасибо!!
@Maxime Да, потому что сеанс не запускается. Бывает, истинную причину можно найти, посмотрев на код. Но я думаю, что безопасно снова поставить туда session_start. Если ваша проблема решена, пометьте правильный ответ для будущих посетителей.
Код php, который вы показываете, это код, который находится внутри
get-promo.php? Потому что в этом случае нет смысла запрашивать ` $arr `, когда вы передаете в публикацию get-promo, вы должны запрашиватьisset($_Post['get-promo'])