1

Unable to add success message through ajax success function using messageManager in magento2.

How to display default message of magento2 using ajax functionality?

JS code

        $('#finalSubmit').click( function() 
        { //can be replaced with any event
            //dataForm.validation('isValid'); //validates form and returns boolean
            $('.ajax-file-upload > form > input').unwrap(); 

            if(dataForm.validation('isValid') === false)
            {
                $("#mulitplefileuploader").uploadFile(settings);
                return false;
            }


            if(dataForm.validation('isValid')==true)    
            {
                $.ajax({
                    type:'POST',
                    url: '<?php echo $this->getUrl("customdesignsubcategories/index/sendEmail");?>',
                    data: dataForm.serialize(),
                    dataType:'json',
                    success: function(data){

                        if(data.status == "CaptchaError")
                        {
                            $('#customdesignsubcategories_form .invalid-captcha').show();
                            $('#customdesignsubcategories_form').find('input[name*="captcha"]').focus();    
                        }else if(data.status == "Success")
                        {

                        }
                    }
                })

            }
        });

Controller code

 public function execute()
{   
    $response = array();
    $resultJson = $this->resultJsonFactory->create();

    $previous_full_url = $this->_redirect->getRefererUrl();
    $page_type = (string)$this->pageType();

    $cds_params = array();
    $cds_params = $this->getRequest()->getParams();
    $captcha_formID = $this->_CustomDesignSubCategoriesModel->getCaptchaFormId();
    $_captcha = $this->_customerSession->getData($captcha_formID . '_word');
    $this->_customerSession->setData($page_type, array($cds_params));

    if ($cds_params['captcha'][$captcha_formID] == $_captcha['data']) 
    {
        if((count($cds_params) > 0) && !empty($cds_params['comment']) && !empty($cds_params['name']) && !empty($cds_params['form_email']) )
        {
            $attachment_dir = $this->_CustomDesignSubCategoriesModel->getAttachementSavingDir();
            $file_dir = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath() . $attachment_dir;     
            $uploadedFiles = $this->getRequest()->getParam('uploadedfiles');
            $_uploadedFiles = explode(",",str_replace('"','',ltrim($uploadedFiles,",")));
            $filesToAttach = $this->getRequest()->getParam('filesToAttach');
            $result = array();
            $oneDimensionalArray = array();
            if($filesToAttach !="")
            {
                $_filesToAttach = explode(",",rtrim($filesToAttach,","));
                $_uniqueFilesToAttach = array_unique($_filesToAttach);
                foreach($_uniqueFilesToAttach as $key=>$value)
                {
                    if($this->getRequest()->getParam(str_replace(".","_",$value)))
                    {
                        $temp[] = $this->getRequest()->getParam(str_replace(".","_",$value));
                        foreach($temp as $val)
                        {
                            $result[] = $val;
                        }
                        unset($temp);
                    }
                }
            }

            if(sizeof($result) > 0)
            {
                $oneDimensionalArray = call_user_func_array('array_merge', $result);
                $max_file_size = 26214400; //25MB
                $file_size = 0;

                foreach($oneDimensionalArray as $file) 
                {
                    if(file_exists($file_dir.$file) && $file) 
                    {
                        $currentFileSize = filesize($file_dir.$file);
                        $file_size = $file_size + $currentFileSize;
                    }
                }

                if($file_size > $max_file_size) 
                {
                    $arr = array();
                    $arr = $this->getRequest()->getParams();
                    $this->_customerSession->setData('data', array($arr));
                    $this->messageManager->addError('File size exceeded.');
                    $this->_redirect('*/*/');
                    return;
                }

                $allowed_file_type = array("pdf", "ppt", "pptx","doc", "docx", "jpg", "jpeg", "png", "gif", "xlsx", "xlsm", "xlsb", "xls", "xltx", "xltm", "xlt", "csv", "xlam", "xla", "ods", "zip", "txt");
                foreach($oneDimensionalArray as $file)
                {
                    if(file_exists($file_dir.$file) && $file) 
                    {
                        $ext = pathinfo($file_dir.$file, PATHINFO_EXTENSION);
                        $ext = strtolower($ext);
                        if(!in_array($ext, $allowed_file_type)) 
                        {
                            $arr = array();
                            $arr = $this->getRequest()->getParams();
                            $this->_customerSession->setData('data', array($arr));
                            $this->messageManager->addError('This extension is not allowed.');
                            $this->_redirect($previous_full_url);
                            return;
                        }
                    }
                }
            }

            $store = $this->_storeManager->getStore()->getId();
            $emailTemplateVariables = array();
            $emailTemplateVariables = $this->getRequest()->getParams();
            $emailTemplateVariables['emailTitle'] = $this->_CustomDesignSubCategoriesModel->getEmailMessageTitle();
            $emailTemplateVariables['tableTitle'] = $this->_CustomDesignSubCategoriesModel->getTableTitle();
            $emailTemplateVariables['emailSubject'] = $this->_CustomDesignSubCategoriesModel->getEmailSubject();

            $to = $this->_CustomDesignSubCategoriesModel->getEmailReciept();
            $bcc =$this->_CustomDesignSubCategoriesModel->getBccEmailReciept();
            $emails = explode(",",$bcc);

            $headers = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

            try
            {
                $this->_template  = $this->_scopeConfig->getValue(self::XML_PATH_EMAIL_CUSTMDESIGNSUBCATEGORIES,ScopeInterface::SCOPE_STORE,$store);
                $this->_transportBuilder->setTemplateIdentifier($this->_template)
                ->setTemplateOptions(array('area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $store))
                ->setTemplateVars($emailTemplateVariables)
                ->setFrom(['name' => 'Slideteam','email' => 'design@slideteam.net'])
                ->addTo($to,"Admin");

                if(!empty($emails))
                {
                    foreach($emails as $email)
                    {
                        $this->_transportBuilder->addCc($email);
                    }
                }

                foreach ($oneDimensionalArray as $file)
                {
                    if (file_exists($file_dir.$file))
                    {
                        $this->_transportBuilder->addAttachment(file_get_contents($file_dir.$file),$file);                      
                    }
                }

                $response['status'] = "Success";

                $transport = $this->_transportBuilder->getTransport();
                $transport->sendMessage();  
                $this->messageManager->addSuccess('Your query has been successfully submitted.');
                return $resultJson->setData($response);     
                $this->_customerSession->unsetData($page_type);
                $this->_redirect($previous_full_url);


            } 
            catch (\Exception $e) 
            {
                echo $e->getMessage();
                $this->_messageManager->addError("Unable to send email");
                $this->_redirect($previous_full_url);
            }
        }
        else
        {
            $this->messageManager->addError('Please fill up required fields');
            $this->_redirect($previous_full_url);  
        }

    }
    else
    {
        $response['status'] = "CaptchaError";
        $this->_customerSession->setBrCaptchaError(true);

    }
    return $resultJson->setData($response);
}
0

=> Add this code in your controller :

<?php
namespace VendorName\ModuleName\Controller\Index;

use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class Addtocart extends \Magento\Framework\App\Action\Action {

protected $_messageManager;

public function __construct(
    Context $context,
    \Magento\Framework\Message\ManagerInterface $messageManager,
) {
    parent::__construct($context);
    $this->_messageManager = $messageManager;
}

public function execute() {
    // your logic code
    $this->_messageManager->addSuccess('Shopping cart updated succesfully.');
}
  • Can this solution be applicable for ajax success function? – Parthavi Dec 10 '18 at 5:04
  • Yes. It will display when ajax response success – Emipro Technologies Pvt. Ltd. Dec 10 '18 at 5:06
  • I have added the code as per your solution but i am not able to add success message – Parthavi Dec 10 '18 at 5:13
  • Please upload your js and controller code. – Emipro Technologies Pvt. Ltd. Dec 10 '18 at 5:18
  • U can check my code above – Parthavi Dec 10 '18 at 5:29
0

Please check this code in your controller and js.

Js Code:

<script type="text/javascript">
require([
    "jquery",
    "mage/mage"
],function($) {
    $(document).ready(function() {
        $('#AJAX-FORM-ID').mage(
            'validation',
            { 
                submitHandler: function(form) {
                    $.ajax({
                        url: "<?php /* @escapeNotVerified */ echo $block->getAction(); ?>",
                        data: $('#AJAX-FORM-ID').serialize(),
                        type: 'POST',
                        dataType: 'json',                        
                        beforeSend: function() {
                            $('body').trigger('processStart');                            
                        },
                        success: function(response) {

                        }
                    });
                }
            }
        );
    });
});
</script>

Controller Code:

<?php
namespace VendorName\ModuleName\Controller\Index;

use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class Index extends \Magento\Framework\App\Action\Action {

    public function execute() {    
        $this->messageManager->addSuccess('form submitted succesfully.');
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.