часами ломал голову над этим, у меня есть следующий код 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>';
}
}
}