请帮助我!我正在写表格保存在Magento 2中的存货,保存->消息不起作用后,如果重新加载页面有效。非常感谢
在我的控制器中执行功能
$data = $this->getRequest()->getParams();
$sku = $data['sku'];
$qty = $data['qty'];
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();
//echo "ok ".$sku;
$this->messageManager->addSuccessMessage(__('All good'));
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
//echo "khong co ".$sku;
$this->messageManager->addErrorMessage(__('This is bad'));
}
$response = $this->resultFactory
->create(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
->setData([
'sku' => $sku,
'qty' => $qty
]);
return $response;
我的JQUERY
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){
alert("ss");
console.log($response);
}
});
})
});
答案 0 :(得分:0)
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
我希望这对任何人都有帮助。
答案 1 :(得分:0)
我不清楚您的问题在哪里,但是您可以稍微简化代码,并通过给定的sku直接加载stockItem。下面的代码对我有用,例如,如果我直接通过带有参数sku和qty的URL调用它,则为:
$data = $this->getRequest()->getParams();
$sku = $data['sku'];
$qty = $data['qty'];
try {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$stockItem = $this->_stockRegistry->getStockItemBySku($sku);
$stockItem->setQty($qty);
$stockItem->save();
//echo "ok ".$sku;
$this->messageManager->addSuccessMessage(__('All good'));
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
//echo "khong co ".$sku;
$this->messageManager->addErrorMessage(__('This is bad'));
}
$response = $this->resultFactory
->create(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
->setData([
'sku' => $sku,
'qty' => $qty
]);
return $response;
问题很可能与您的JSON返回有关,但我不是专家:-)