I am trying to access a URL via AJAX in Magento 2’s admin area. I have tried many things but every time the response is 404 Forbidden.
This is the code my module has:
Vendor/Module/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_Module" setup_version="1.0.0">
</module>
</config>
Vendor/Module/etc/adminhtml/routes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="adminhtml">
<module name="Vendor_Module" before="Magento_Backend" />
</route>
</router>
</config>
AJAX JS Code using Prototype:
new Ajax.Request('<?php /* @escapeNotVerified */ echo $block->getAdminUrl(); ?>adminhtml/action/add', {
method: 'post',
parameters: {'order_id' : <?php /* @escapeNotVerified */ echo $block->getOrderId(); ?>},
onSuccess: function(response) {
console.log($response);
this.add();
}.bind(this)
});
Vendor/Module/Controller/Adminhtml/Action/Add.php
<?php
namespace VendorModuleControllerAdminhtmlAction;
class Add extends MagentoBackendAppAction
{
protected $_context;
protected $_pageFactory;
protected $_jsonEncoder;
public function __construct(
MagentoBackendAppActionContext $context,
MagentoFrameworkJsonEncoderInterface $encoder,
MagentoFrameworkViewResultPageFactory $pageFactory
) {
$this->_context = $context;
$this->_pageFactory = $pageFactory;
$this->_jsonEncoder = $encoder;
parent::__construct($context);
}
public function execute()
{
$response = array('status' => 'success');
$this->getResponse()->representJson($this->_jsonEncoder->encode($response));
return;
}
}
Please tell me how I can access this admin URL via AJAX.
3
Answers
I am convinced that missing frontName in the route configuration file is the reason why error 404 is popping up so replace xyz with your frontName as specified above
I had tried all of the above methods but non of them are working or incomplete so I had decided to answer it in details:
Following will be module minimal diagram
1)
2)
3) Need to declare admin router
4)
Now Client Part which is actually bit tricky I am calling it in js file like somefilename.js
gpImageTagSaveUrl
is globel variable which will hold your modules url you can declare it in some js file like followingI had used catalog_product_edit.xml file because I want it at product edit location you can add it in your required file or in default.xml if required on all.
Now in js.phtml declare action url like following:
You should have to provide admin user somehow. I think will be better to create API endpoint instead.