I already have a form and controller action, that send data without using ajax.How to do it with AJAX? I would appreciate your help!
view/frontend/templates/reviews.phtml
<form action="<?php echo $block->getBaseUrl().'reviews/index/save'; ?>"
method="post">
<label class="label" for="nickname"><span>Nickname</span></label>
<input name="nickname" id="nickname" title="nickname" value="" class="nickname" type="text">
<label class="label" for="textreview"><span>Text Review</span></label>
<input name="textreview" id="textreview" title="textreview" value="" class="textreview" type="text">
<button type="submit" title="Submit" class="actionSubmitPrimary">
<span>Submit Review</span>
</button>
</form>
<script>
$(document).ready(function () {
$('button.actionSubmitPrimary').on('click', function (){
var nickname = $('input.nickname').val();
var textreview = $('input.textreview').val();
$.ajax({
method:"POST",
url:"<?php echo $block->getBaseUrl().'reviews/index/save'; ?>",
data:{nickname:nickname, textreview:textreview}
})
.done(function (msg) {
alert("OK" +msg);
});
})
})
</script>
Controller/Index/Save.php
<?php
namespace Training\Reviews\Controller\Index;
use Magento\Framework\App\Action\Context;
use Training\Reviews\Model\ReviewsFactory;
class Save extends \Magento\Framework\App\Action\Action
{
protected $_test;
public function __construct(
Context $context,
ReviewsFactory $test
) {
$this->_test = $test;
parent::__construct($context);
}
public function execute()
{
$data = $this->getRequest()->getParams();
$test = $this->_test->create();
$test->setData($data);
if($test->save()){
$this->messageManager->addSuccessMessage(__('You saved
review'));
}else{
$this->messageManager->addErrorMessage(__('Review was not
saved.'));
}
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('reviews/index/index');
return $resultRedirect;
}
}
Controller/Index/Index.php
<?php
namespace Training\Reviews\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action
{
public function execute()
{
$this->_view->loadLayout();
$this->_view->getLayout()->initMessages();
$this->_view->renderLayout();
}
}
Best Answer
You can save custom form data in your database using following way:
Output
I hope it will helpful for you.