JQuery Ajax $ _GET запрос получил неправильный ответ от PHP - PullRequest
0 голосов
/ 22 апреля 2020

Что-то не так происходит:

Я отправляю данные на php через запрос ajax. Там он проверил, что получил пустой или непустой GET и для каждой из этих опций он возвращает разные ответы. Проблема в том, что на странице php ответ правильный, но он становится неправильным, когда возвращается на страницу, с которой он был отправлен.

Когда GET пуст, php возвращает «пусто» (как и ожидалось), но ajax печатает «не пусто» (ожидается «пусто»)

Я абсолютно не понимаю, почему это происходит. Я пытался вернуть различные с выходом и возвращением

AJAX:

$(".rate_form .submit").click(function() {
  var rate_form = $(this).parents().find('.rate_form');
  var rate = rate_form.serialize();
  $.ajax({
    type: "GET",
    url: "rate.php",
    data: {
      "rate": rate
    },
    cache: false,
    success: function(response) {
      console.log(response);
    }
  });
  return false;
});

RATE. PHP:

header("Content-type: text/html; charset=utf-8");

if(empty($_GET)){
    exit('empty');
}elseif (!empty($_GET)){
    exit('not empty');
}


UPD: я попробовал @Barmar предложению

К сожалению, это не связано с проблемой. Я полностью избавился от «кеша», но ситуация не изменилась. Я даже пытался проверить только один аргумент $ _GET для empty() (пробовал также isset()).

Результат тот же, что и раньше: в курсе. php ответ правильный (в зависимости от того, пустой запрос или с аргументами) и на странице с формой всегда есть только один ответ: «пустой». Более того, даже более странно, если вы возвращаете массив $ _GET, то он возвращается правильно (когда $ _GET не пуст, он возвращает «пустой» и не пустой массив)

if (!empty($_GET['rating'])){
    print_r($_GET);
    exit('not empty');
} else {
    print_r($_GET);
    exit("empty");
}

Консольный ответ на странице возвращает "пусто" и не пусто массив

Array
(
    [rate] => rating=1
)
empty

1 Ответ

0 голосов
/ 22 апреля 2020

$_GET никогда не будет пустым при использовании cache: false. Это работает путем добавления дополнительного параметра _=(timestamp) в строку запроса, чтобы URL всегда был другим, чтобы предотвратить его кэширование (это называется «cachebuster»). В результате всегда устанавливается $_GET['_'].

Вы должны удалить этот элемент перед проверкой.

unset($_GET['_']); // remove cachebuster
if (empty($_GET)) {
    echo "empty";
} else {
    echo "not empty";
}
...