在magento 2中运行ajax后,消息不起作用(将form_ui保存在后端)

时间:2019-02-21 06:47:11

标签: jquery magento magento2

请帮助我!我正在写表格保存在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);
        }
    });
})
});

2 个答案:

答案 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返回有关,但我不是专家:-)