BornToFreeFall
@BornToFreeFall
Sielu ilman ihmistä

Элемент не найден AJAX catalog.element причины?

Доброго времени суток! Не думал, что сам обращусь за помощью, но попал в очень интересную ситуацию. Реализовал в интернет магазине pop-up окно, которое подгружается с помощью кнопки "купить". Все работает шикарно, кроме одного момента... Иногда, если нажать повторный раз кнопку "купить" - выдает ошибку с надписью "Элемент не найден". Ровно, как и у рандомного товара. Но если еще раз нажать эту же кнопку, то с нескольких попыток все-таки прогрузится модальное окно. Я думал, что все дело в модальном окне, но по закрытию я реализовал удаление данных из него, чтобы AJAX-ом подтянуть новые значения. Ниже прикладываю видео с демонстрацией проблемы.

Описание реализации:
В catalog.element выводится дополнительный элемент catalog.top, в котором полностью рабочая реализация.
Также, есть единый pop-up, в который заносятся данные с помощью следующей конструкции:
orderButton.on('click', function () {
    let productId = $(this).attr("data-button-buy-id");
    $("#genElement").load("/api/v1/products.php?ID=" + productId, function (responseText, textStatus, XMLHttpRequest) {
        if (textStatus === "success") {
            $("#productLoader").hide(); // Скрываем spinner
            initializeScripts(); // Инициализируем нужные нам для catalog.element скрпиты (временный костыль)
        }
    });
});

$("#centralModalLg").on('hide.bs.modal', function (e) {
    $("#productLoader").show(); // Возвращаем spinner в привычное состояние (временный костыль)
    $("#genElement").empty(); // Очищается pop-up от данных внутри него
});


Файл product.php
spoiler

<?php
    require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
    if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

    /** @global CMain $APPLICATION */
    /** @var string $componentPath */
    /** @var CBitrixComponent $component */

    $productID = $_GET['ID'];

    if (!isset ($productID))
        die ('Не получен параметр ID');

    $APPLICATION->IncludeComponent(
	"bitrix:catalog.element",
	"modal-element",
	array(
		"ACTION_VARIABLE" => "act",
		"DETAIL_PICTURE_MODE" => array(
			0 => "POPUP",
			1 => "MAGNIFIER",
		),
		"DISABLE_INIT_JS_IN_COMPONENT" => "Y",
		"DISPLAY_NAME" => "Y",
		"ELEMENT_ID" => $productID,
		"IBLOCK_ID" => "5",
		"IBLOCK_TYPE" => "catalog",
		"IMAGE_RESOLUTION" => "16by9",
		"MAIN_BLOCK_PROPERTY_CODE" => array(
			0 => "ARTNUMBER",
			1 => "BRAND",
			2 => "COLOR",
			3 => "MATERIAL",
			4 => "MORE_PHOTO",
			5 => "ADDITIONAL_FILES",
			6 => "AMOUNT",
			7 => "AMOUNT_EUROPE",
		),
		"OFFERS_SORT_FIELD" => "sort",
		"OFFERS_SORT_FIELD2" => "id",
		"OFFERS_SORT_ORDER" => "asc",
		"OFFERS_SORT_ORDER2" => "desc",
		"OFFER_ADD_PICT_PROP" => "-",
		"PARTIAL_PRODUCT_PROPERTIES" => "N",
        "PRICE_CODE" => array("BASE"),
		"PRICE_VAT_INCLUDE" => "Y",
		"PRICE_VAT_SHOW_VALUE" => "N",
		"PRODUCT_ID_VARIABLE" => "id",
		//"SECTION_ID" => $_REQUEST["SECTION_ID"],
		"SECTION_ID_VARIABLE" => "SECTION_ID",
		"COMPONENT_TEMPLATE" => "modal-element"
	),
	false
);
?>



Ссылка на видео: Ссылка

UPD: Иногда почему-то не передается параметр "ID", узналось в результате отладки. Но вот вопрос... Почему?
Скриншот с дампом, где ничего не получено:
60d31db01d4b3999608559.png

UPD2: Проблема была решена. Оказалось, что в двух компонентах дублировались куски JS кода, моя оплошность, сам не заметил. Плюс ко всему - помог избавиться от побочек аналогичной проблемы один топик на форуме битрикс, решение побочки достаточно простое - ACTION_VARIABLE замените на свой параметр. Не факт, что у вас случится аналогичная проблема, но имеет место быть.
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы