Magento 2: Отображать загрузчик во время вызова Ajax в пользовательском нокауте js
Я использую это расширение , которое добавляет дополнительную плату за предложение после выбора конкретного платежа. После выбора любого способа оплаты он выполняет вызов ajax, я хочу показывать загрузчик до тех пор, пока запрос ajax не будет завершен. ниже приведен мой файл js
define(
[
'ko',
'jquery',
'Magento_Checkout/js/model/quote',
'Magento_Checkout/js/model/resource-url-manager',
'Magento_Checkout/js/model/payment-service',
'mage/storage',
'mage/url',
'Magento_Checkout/js/action/get-totals',
'mage/translate',
'Magento_Checkout/js/model/payment/method-list'
],
function(
ko,
$,
quote,
urlManager,
paymentService,
storage,
urlBuilder,
getTotalsAction
) {
'use strict';
return function (isLoading, payment) {
var serviceUrl = urlBuilder.build('paymentfee/checkout/totals');
return storage.post(
serviceUrl,
JSON.stringify({payment: payment})
).done(
function(response) {
if(response) {
var deferred = $.Deferred();
isLoading(false);
getTotalsAction([], deferred);
}
}
).fail(
function (response) {
isLoading(false);
//var error = JSON.parse(response.responseText);
}
);
}
}
);
Я попытался ввести класс 'Magento_Checkout/js/model/full-screen-loader'
, а затем использовать fullScreenLoader.startLoader();
, но это не работает.
Может ли кто-нибудь подсказать мне, как показать изображение загрузчика на странице оформления заказа?
3 answers
Вы можете отобразить загрузчик по умолчанию в magento, используя следующий код
var body = $('body').loader();
body.loader('show');
Если вы хотите скрыть, используйте следующий код
var body = $('body').loader();
body.loader('hide');
ИЛИ
jQuery('body').loader('destroy');
ИЛИ
var body = $('body').loader();
body.loader('destroy');
Вы можете попробовать для начала:
jQuery('body').trigger('processStart');
ИЛИ
$('body').trigger('processStart');
И для удаления:
jQuery('body').trigger('processStop');
ИЛИ
$('body').trigger('processStop');
Все ответы на этой странице неверны. Вам нужно добавить модель "magento_checkout/js/модель/полноэкранный загрузчик" в раздел "Определение", а затем использовать ее для отображения/скрытия загрузчика.
Приведенный ниже код взят из vendor/magento/module-negotiable-quote/view/frontend/web/js/action/set-payment-information-mixin.js. Обратите внимание, как он вызывает fullScreenLoader.startloader(), а затем fullScreenLoader.stopLoader() после завершения хранения.post:
define([
'mage/utils/wrapper',
'mage/storage',
'Magento_Checkout/js/model/quote',
'Magento_Checkout/js/model/url-builder',
'Magento_Checkout/js/model/error-processor',
'Magento_Checkout/js/model/full-screen-loader'
], function (wrapper, storage, quote, urlBuilder, errorProcessor, fullScreenLoader) {
'use strict';
return function (setPaymentInformation) {
return wrapper.wrap(setPaymentInformation, function (originalAction, messageContainer, paymentData) {
var serviceUrl, payload;
if (window.checkoutConfig.isNegotiableQuote) {
serviceUrl = urlBuilder.createUrl('/negotiable-carts/:cartId/set-payment-information', {
cartId: quote.getQuoteId()
});
payload = {
cartId: quote.getQuoteId(),
paymentMethod: paymentData,
billingAddress: quote.billingAddress()
};
fullScreenLoader.startLoader();
return storage.post(
serviceUrl, JSON.stringify(payload)
).fail(function (response) {
errorProcessor.process(response, messageContainer);
}).always(fullScreenLoader.stopLoader);
}
return originalAction(messageContainer, paymentData);
});
};
});