Ajax runs on page load i want to run it on button click.
I create one Module and make a custom tab which is display some product with name and price and if the product is enable/disable. I want that user update that price from front-end and enable and disable that product from front-end.[![enter image description here][1]][1]
This is my Controller File
<?php namespace Deal\Val\Controller\Valuation; use Magento\Framework\View\Result\PageFactory; use Magento\Framework\App\Action\Context; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\ResourceModel\Product\Action; class Index extends \Magento\Framework\App\Action\Action { protected $customerSession; protected $urlInterface; protected $customer; private $productAction; public function __construct( Action $productAction, \Magento\Customer\Model\Session $customerSession, \Magento\Framework\UrlInterface $urlInterface, \Dealers\Validation\Model\Customer $customer, \Magento\Framework\App\Action\Context $context ) { $this->urlInterface = $urlInterface; $this->customerSession = $customerSession; $this->customer = $customer; $this->productAction = $productAction; parent::__construct($context); } public function execute() { if(!$this->customerSession->isLoggedIn()) { $this->messageManager->addErrorMessage("You must be logged in to view product"); $this->customerSession->setAfterAuthUrl($this->urlInterface->getCurrentUrl()); $this->customerSession->authenticate(); return; } /*$data = $this->getRequest()->getPost(); $this->customer->saveproduct($data);*/ $productIds = [47]; $storeId = 0; $attributes = [ //'status' => Status::STATUS_ENABLED, 'price' => 70 ]; $this->productAction->updateAttributes($productIds, $attributes, $storeId); $this->_view->loadLayout(); $this->_view->renderLayout(); } } This is my Model File
<?php namespace Deal\Val\Model; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\ResourceModel\Product\Action; class Customer { /** * @var Action */ private $productAction; public function __construct( Action $productAction ) { $this->productAction = $productAction; } public function execute() { /** Array of product ids */ $productIds = [47]; /** Contains the id of the store in which you would like to enable/disable the product */ $storeId = 0; /** * You can put any number of product attributes here. However, in the scope of this code we are going to * only enable/disable the product. */ $attributes = [ 'status' => Status::STATUS_ENABLED ]; $this->productAction->updateAttributes($productIds, $attributes, $storeId); } } This is my JS file
require(["jquery"],function($) { $(document).ready(function() { $( "#price" ).click(function() { let customurl = "<?php echo $this->getUrl().'customer/valuation/index'?>"; let dataid = $(this).data('id'); $.ajax({ url: customurl, type: 'POST', dataType: 'json', data: { dataid: dataid }, complete: function(response) { console.log(response); }, }); }); }); console.log('aa'); }); How can i send response success or error in JSON format.