Функции addSuccessMessage () и addErrorMessage () работают над перезагрузкой страницы в Magento.Так что вам нужно сделать некоторые настройки для отображения сообщения после ответа AJAX.Отправьте ответ JSON с вашего контроллера следующим образом:
$data = $this->getRequest()->getParams();
$sku = $data['sku'];
$qty = $data['qty'];
$response = [];
try {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productId = $this->product->getIdBySku($sku);
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$stockItem = $this->_stockRegistry->getStockItemBySku($product->getSku());
$stockItem->setQty($qty);
$stockItem->save();
$response = ['error' => false, 'message' => __('All good')];
}
catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
$response = ['error' => true, 'message' => __('This is bad')];
}
echo json_encode($response); // return response to ajax call in js file
В соответствии с переменной ответа напечатайте ваше сообщение следующим образом: Предположим, вы хотите напечатать сообщение в <div id="printmessage">
:
require(['jquery','jquery/ui'],function($){
$("#button-unique-identifier-here").click(function(){
var sku = $("input[name$='general[sku]']").val();
var stocktaking = $("input[name$='general[stocktaking]']").val();
url = '/admin/stocktaking/index/save';
jQuery.ajax({
url: url,
dataType: 'json',
type : 'post',
data: {sku: sku,qty: stocktaking},
success: function($response) {
var res = JSON.parse(JSON.stringify(response));
var responseText = JSON.parse(res.responseText);
if (responseText.error === true) {
$("#printmessage").addClass("error");
return false;
}
else {
$("#printmessage").addClass("success");
}
$("#printmessage").html(responseText.message);
}
});
});
});
ВыполнитьСледующая команда:
php bin/magento c:f
Я надеюсь, что это может быть полезно для всех.