ОШИБКА: постоянная опция «неопределено» в Select после AJAX.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 ОШИБКА: постоянная опция «неопределено» в Select после AJAX.

Сообщение Anonymous »

Я реализую специальный тест по фильтрации продуктов в WooCommerce, где параметры во втором и третьем раскрывающихся списках («Ингредиенты») загружаются динамически на основе выбора в первом раскрывающемся списке («Тип аромата») через AJAX.
Проблема в том, что после того, как запрос AJAX успешно возвращает условия, первый вариант в раскрывающихся списках ингредиентов постоянно отображается как «неопределенный», даже если под ним корректно добавляются действительные условия. Это предполагает молчаливый вывод или неверные данные, отправленные с сервера.
Как видно на снимке экрана ниже.
Изображение
Выборы, которые интересуют, — это «2» и «3»
Ожидаемое поведение
В раскрывающемся списке ингредиентов должен отображаться локальный заполнитель (например, «Выбрать основной ингредиент»), за которым следует список допустимых терминов. Он не должен содержать слово "неопределено".
Сведения о диагностике
Я уже реализовал очистку на стороне клиента и пробовал фильтровать в PHP, но проблема не устранена.
  • Внешний JavaScript (приемник)
    JavaScript прослушивает событие изменения и обновляет раскрывающийся список, добавляя локальный заполнитель:

Код: Выделить всё

// --- In vv-quiz-dynamic.js (AJAX Success Block) ---
success: function(response) {
// We are seeing 'undefined' here, even though we filter the response.
let $options = $('').html(response).find('option');

// [CRITICAL SECTION: The filter is failing to remove the bad index]
$options = $options.filter(function() {
const text = $(this).text().trim();
const value = $(this).val();
// This fails to catch the malformed option that leads to 'undefined'.
return value !== '' && text.toLowerCase() !== 'undefined';
});

// Insertion logic:
allIngredientSelects.forEach(function(select) {
const placeholderText = // ... (retrieves local placeholder) ...

// This is where 'undefined' is visually inserted, either from the response
// or a default state before insertion.
select.html('' + placeholderText + '' + $options.map(function() {
return this.outerHTML;
}).get().join(''));
select.prop('disabled', false);
});
},
  • Бэкэнд PHP (источник выходных данных)
    Обработчик PHP AJAX (vv_ajax_filter_ingredients) извлекает связанные термины и выводит необработанные параметры HTML:

Код: Выделить всё

// --- In vv_ajax_filter_ingredients() (class-vv-core.php) ---
// ... (Logic to get $product_ids and $terms remains the same) ...

// RENDER HTML OPTIONS
if ( ! is_wp_error( $terms ) && is_array( $terms ) ) {
foreach ( $terms as $term ) {
// We ensure we only print valid objects:
if ( $term instanceof WP_Term && ! empty( $term->slug ) && ! empty( $term->name ) ) {
$options_html .= '' . esc_html( $term->name ) . '';
}
}
}
// The function ends with a clean echo and wp_die():
echo $options_html;
wp_die();

Вопрос к сообществу: Учитывая, что вывод PHP строго контролируется, чтобы предотвратить пустые параметры, почему получатель JavaScript по-прежнему интерпретирует первый элемент ответа как искаженный элемент без значения («неопределенный»), требующий ручной фильтрации? Есть ли внутренний недостаток в использовании $(response) при получении строки чистых тегов?
Вы также можете найти полный код -> https://github.com/LittleDTLe/VapeProdu ... xfiltering

Подробнее здесь: https://stackoverflow.com/questions/798 ... after-ajax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»