AJAX успешно публикует переменные, которые не видны в $ _POST - PullRequest
0 голосов
/ 04 апреля 2020

часами ломал голову над этим, у меня есть следующий код JQuery, который следит за изменением выбора с именем «CategoryID». Затем он отправляет значение выбора «CategoryID» в PHP сценарий процессора, который запрашивает MySQL для подкатегорий, возвращает обновленные параметры и заполняет «SubCategoryID» выбор.

В PHP обработчик сценария, если у меня var_dump ($ _ POST) вверху сценария, я получаю пустой массив POST. Я также попытался сбросить $ _REQUEST, но все еще пустой print_r () дает тот же пустой массив

Однако скрипт работает нормально, получает правильные данные из БД и заполняет веб-страницу. Я даже могу изменить сценарий и сохранить «CategoryID» в БД, и он заполняет его правильным значением ... Как относительное nubee к JS, для моего собственного понимания, как это возможно.

I Посмотрел некоторые другие вопросы, опубликованные, но ни один из них не дал решения

    $(document).ready(function() {  $('select[name="CategoryID"]').change(function() {
    var selectedCategoryID = $('select[name="CategoryID"] option:selected').val();
    var selectedSubCategoryID = $('select[name="SubCategoryID"] option:selected').val();
    $.ajax({
      method: "POST",      
      url: '/../_JQuery/PHPProcessorScript.php',
      data: { CategoryID : selectedCategoryID, SubCategoryID : selectedSubCategoryID },
      cache: false
    }).done(function(data) {
      $("select[name=SubCategoryID]").html(data);
    })
  })
})

PHP Сценарий процессора

var_dump($_POST); exit; // Returns an empty array with no ajax values

// Если я удаляю выход, скрипт возвращает ожидаемое результат, поэтому значения ajax анализируются каким-то образом ... $ _POST ['CategoryID'] = trim ($ _ POST ['CategoryID']); $ _POST ['SubCategoryID'] = trim ($ _ POST ['SubCategoryID']);

if (empty($_POST['CategoryID'])) {
    print '<option value="">select a category first</option>';
}

if (!empty($_POST['CategoryID'])) {
    if (ctype_digit($_POST['CategoryID'])) {
        if (strlen($_POST['CategoryID']) <= 11) {
            $DBConnection = new database_connector();
            $PS1SQL = 'SELECT
                        ID,
                        Description
                       FROM db_table
                       WHERE
                        CategoryID = :CategoryID';
            $Statement = $DBConnection->Prepare($PS1SQL);
            $Statement->bindParam(':CategoryID', $_POST['CategoryID'], PDO::PARAM_INT);
            $Statement->Execute();
            if ($PS1RS = $Statement->fetchAll(PDO::FETCH_ASSOC)) {
                $PS1RS = array_merge(array(000 => array('ID' => 0, 'Description' => 'choose a sub category')), $PS1RS);
                foreach ($PS1RS as $Key => $SubCategory) {
                    if ($_POST['CategoryID'] == $SubCategory['ID']) {
                        $SubCategoryList .= "<option value=\"$SubCategory[ID]\" selected=\"true\">$SubCategory[Description]</option>\n";
                    } else{
                        $SubCategoryList .= "<option value=\"$SubCategory[ID]\">$SubCategory[Description]</option>\n";
                    }
                }
                print $SubCategoryList;
            } else {
                print '<option value="" selected="true">Oops! no sub categorys available</option>';
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...