Перейти к основному контентуСправка по использованию специальных возможностей
Оставить отзыв о специальных возможностях
Режим ИИ
Все
Картинки
Видео
Новости
Ещё
Покупки
Карты
Книги
Авиабилеты
Произошла ошибка. Ваша история поиска не была удалена.

Результаты поиска

История режима ИИ
Новый чат

Удалить все поисковые запросы?

Вы не сможете вернуться к этим ответам.
Удалить все
Настроить общедоступные ссылки
Моя история Google Поиска

Удалить поисковой запрос?

Вы не сможете вернуться к этому ответу.
История режима ИИ

Удалить все поисковые запросы?

Вы не сможете вернуться к этим ответам.
Удалить все
Настроить общедоступные ссылки
Моя история Google Поиска
Нет истории режима ИИ
Продолжайте работу с того места, где остановились.
Сохраните историю, чтобы быстрее получать ответы на дополнительные запросы, просматривать результаты по прежним запросам и пользоваться другими функциями.
bootstrap создать красивое дополнить информационное поле когда удачно и когда ошибки тогда выводить в поле ошибки$('#generateNosy').on('click', function (e) { e.preventDefault(); //const formData = collectFormData(); const configData = collectFormData(); // Проверяем, что получили данные console.log('Config data:', configData); // Используем result_array или result_string из возвращаемого объекта const resultArray = configData.result_array || []; const resultString = configData.result_string || resultArray.join('-'); const $resultDiv = $('#result'); // Показываем результат $resultDiv.text(resultString !== '0-0-0-0-0-0-0-0-0-0-0-0-12' ? 'Шифрование конфигурации: ' + resultString : 'Выберите параметры'); $resultDiv.removeClass('hidden'); console.log('Собранные данные:', configData); console.log('Result string:', resultString); console.log('Result string length:', resultString.length); if (resultString.length > 26 && resultString !== '0-0-0-0-0-0-0-0-0-0-0-0-12') {//if (formData.result_string.length > 26 && formData.result_string !== '0-0-0-0-0-0-0-0-0-0-0-0-12') { const form = document.getElementById('form'); const formDataObj = new FormData(form); // Добавляем структурированные данные /*formDataObj.append('nosy', formData.result_array); formDataObj.append('nosy_string', formData.result_string); formDataObj.append('nosy_structured', JSON.stringify(formData.sections)); formDataObj.append('API_nosy', true);*/ formDataObj.append('nosy', resultArray); formDataObj.append('nosy_string', resultString); formDataObj.append('nosy_structured', JSON.stringify(configData.sections)); formDataObj.append('API_nosy', true); // Отправка через fetch fetch('../nosy/save_form.php', { method: 'POST', body: formDataObj }) .then(res => res.json()) .then(data => { console.log('Ответ сервера:', data); if (data && data.API) { $('#htmlret').html(data.API); $('#search-query').val($('body #outpost').val()); //$('.nosy-field').click(); $('.nosy-error').show(); } else if (data && typeof data === 'string') { //$('#htmlret').html(data); } $('#result').html(data.API); if(data.error!=''){ $('#result-error').html(data.error).show(); //$('#result').nextUntil('div').filter('span').remove(); //$('#result').after(data.API); }else{ $('#result-error').html('').hide(); $('#search-query').val(data.APItext); $('.nosy-field').click(); $('.nosy-error').show(); } // Проверяем, существует ли уже элемент с таким ID if ($('#outpost').length) { $('#outpost').val(data.APItext); // Если есть — обновляем value } else { //$('#outpost').remove(); //$('#result').before($(data[0])); // Если нет — вставляем один раз $('#outpost').val(data.APItext); } }) .catch(err => { console.error('Ошибка:', err); }); }});<div class="mt-5 mb-4"> <button id="generateNosy" type="button" class="w-full btn btn-secondary bg-blue-500 p-2 rounded-md hover:bg-blue-600">Сформировать конфигурацию</button> <div id="result" class="mt-4 p-4 bg-gray-200 rounded-md hidden"></div> <div id="result-error" class="mt-4 p-4 bg-blue-50 rounded-md hidden"></div> <input type="hidden" value="" id="outpost"> <? if($_SESSION['id']>5): ?> <!-- Детальный вывод по секциям --> <div id="detailedResult" class="mt-4 p-4 bg-blue-50 rounded-md hidden"> <h6 class="font-bold mb-2">Детальный разбор по секциям:</h6> <div id="sectionsDetail" class="text-sm"></div> </div> <? endif; ?> </div>
11:04
Для того чтобы сделать поле информативным и визуально приятным в стиле Bootstrap, лучше всего использовать Alerts (уведомления). Они автоматически меняют цвет в зависимости от статуса (успех/ошибка) и выглядят профессионально. 
Вот как можно переписать ваш блок и скрипт: 
1. HTML структура (обновленная) 
Заменим несколько разрозненных div на одно универсальное поле. 
html
<div class="mt-5 mb-4">
    <button id="generateNosy" type="button" class="btn btn-primary w-100 p-2 shadow-sm">
        Сформировать конфигурацию
    </button>

    <!-- Одно поле для статусов и результатов -->
    <div id="status-container" class="mt-4 alert hidden" role="alert">
        <div id="status-icon" class="me-2"></div>
        <div id="status-content"></div>
    </div>

    <!-- Скрытое поле для системных данных -->
    <input type="hidden" value="" id="outpost">

    <? if($_SESSION['id'] > 5): ?>
        <div id="detailedResult" class="mt-4 p-3 border rounded bg-light hidden">
            <h6 class="fw-bold border-bottom pb-2 mb-2">Детальный разбор:</h6>
            <div id="sectionsDetail" class="small text-muted"></div>
        </div>
    <? endif; ?>
</div>
Используйте код с осторожностью.
Скопировано в буфер обмена
2. JavaScript логика 
Добавим функцию, которая "красит" поле в нужный цвет и выводит текст. 
javascript
$('#generateNosy').on('click', function (e) {
    e.preventDefault();
    
    const configData = collectFormData();
    const resultArray = configData.result_array || [];
    const resultString = configData.result_string || resultArray.join('-');
    const $statusBox = $('#status-container');
    const $statusContent = $('#status-content');

    // Функция-помощник для отображения статуса
    function showStatus(message, type = 'info') {
        $statusBox.removeClass('hidden alert-success alert-danger alert-info alert-warning')
                  .addClass(`alert-${type} d-flex align-items-center`)
                  .fadeIn();
        $statusContent.html(message);
    }

    // Проверка перед отправкой
    if (resultString === '0-0-0-0-0-0-0-0-0-0-0-0-12') {
        showStatus('<strong>Внимание!</strong> Выберите параметры конфигурации.', 'warning');
        return;
    }

    if (resultString.length > 26) {
        const formDataObj = new FormData(document.getElementById('form'));
        formDataObj.append('nosy', resultArray);
        formDataObj.append('nosy_string', resultString);
        formDataObj.append('nosy_structured', JSON.stringify(configData.sections));
        formDataObj.append('API_nosy', true);

        fetch('../nosy/save_form.php', { method: 'POST', body: formDataObj })
        .then(res => res.json())
        .then(data => {
            if (data.error) {
                // Если пришла ошибка от сервера
                showStatus(`<strong>Ошибка:</strong> ${data.error}`, 'danger');
            } else {
                // Успешное выполнение
                showStatus(`<strong>Успешно!</strong> Конфигурация сохранена: ${data.APItext || resultString}`, 'success');
                
                $('#outpost').val(data.APItext);
                $('#search-query').val(data.APItext);
                
                // Если есть детальные данные
                if (configData.sections) {
                    $('#sectionsDetail').html(JSON.stringify(configData.sections, null, 2));
                    $('#detailedResult').removeClass('hidden');
                }
            }
        })
        .catch(err => {
            showStatus('Произошла ошибка при соединении с сервером.', 'danger');
            console.error(err);
        });
    }
});
Используйте код с осторожностью.
Скопировано в буфер обмена
Что изменилось: 
  1. Типографика Bootstrap: Использованы классы alert-success (зеленый) для удачи, alert-danger (красный) для ошибок и alert-warning (желтый) для пустых полей.
  2. Лаконичность: Вместо трех разных div (#result, #result-error, #htmlret) теперь работает один контейнер, который меняет цвет.
  3. Юзабилити: Добавлена анимация .fadeIn() и четкие жирные акценты через <strong>.
  4. Чистота: Скрипт стал легче читать за счет выноса логики отображения в функцию showStatus. 
Хотите добавить в это поле кнопку копирования полученного кода конфигурации в один клик? 
Копировать
Создание общедоступной ссылки…
Хороший ответ
Плохой ответ

Экономит время
Очистить
Полезный
Подробный
Другое
Неверный
Недопустимый
Не работает
Нет
Другое
Копия этого чата будет добавлена в ваш отзыв
В отзыв будет добавлена копия этого чата и изображение результатов вашего поиска.
В ваш отзыв будет добавлена копия этого чата, все ссылки, которыми вы поделились, а также изображение результатов вашего поиска.
Спасибо, что сообщили нам.
Чтобы проанализировать отзыв и улучшить работу сервисов, мы можем использовать сведения из вашего аккаунта и данные о вашей системе в соответствии с Политикой конфиденциальности и Условиями использования. Если вы обнаружили материалы, нарушающие закон, запросите их удаление.
      Показать все
      Закрыть
      Другие способы ввода
      Микрофон
      Остановить
      Отправить
      Задать вопрос по теме:

      Turn on your Visual Search History?

      Google uses its visual recognition technologies to process the images you use to search, like when you search with Google Lens. If you turn on your Visual Search History, Google will save these images from eligible Google services to your Web & App Activity when you’re signed in to your Google Account. You can learn more about this setting and which Google services save images to it at g.co/Search/VisualSearchHistory.

      How visual search history is used

      Your Visual Search History may be used to improve your experience on Google services, like letting you revisit your past visual searches. It may be used to develop and improve Google’s visual recognition and search technologies, as well as the Google services that use them.

      When visual search history is off

      If you turn this setting off, any previous Visual Search History may still be kept and used to improve Google’s visual recognition and search technologies, unless you delete it from your Web & App Activity.

      Visual Search History doesn’t affect images saved by other settings, like Gemini Apps Activity.

      How to manage your Visual Search History

      You can view, delete, or manage your Visual Search History at activity.google.com. To download your Visual Search History, visit takeout.google.com. Images will be deleted in accordance with your Web & App Activity auto-delete settings, although some types of images may be deleted sooner.

      Google uses and saves data in accordance with Google Privacy Policy.

      No thanks
      Turn on
      Центр управления рекламой
      Приложения Google
      Аккаунт Google
      Артём Казанов
      tracelinemsk@gmail.com