0
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$configLoader = $objectManager->get('\Magento\Backend\Model\UrlInterface');
$url = $configLoader->getUrl('testing/queue/purchase');

<script>
require([
    'jquery',
    'mage/mage',
    'mage/calendar'
], function($){

    $('#customer_company').on('change',function(event){

        $.ajax({
            url: '<?php echo  $url ?>',
            type:'POST',
            showLoader: true,
            dataType:'json',
            complete: function(response) {
                console.log(response);
            },
            error: function (xhr, status, errorThrown) {
                console.log('Error happens. Try again.');
            }
        });
    });
});

i write this code in magento admin on change the ajax request call and its hit my controller but in console the response is Invalid Form Key. Please refresh the page

  • Use this:- "<?php echo $this->getUrl('testing/queue/purchase'); ?>" – temper Oct 1 at 12:07
2

/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 frontName="testing_queue" id="testing_queue">
            <module before="Magento_Backend" name="Vendor_Module"/>
        </route>
    </router>
</config>

in Phtml File

function ajax(){
    var name = document.getElementsByName("product[name]")[0].value;
    var type = document.getElementsByName("product[product_category_type]")[0].value;
    $.ajax({
        url: 'admin/testing_queue/customajax',
        showLoader: true,
        data: {
            id:<?php echo $id ?>,p:pincode
            },
        type: "POST",
        success: function(result){
            console.log(result);
        }
    });
}
0

instead of using object manager and URL interface just use $this->getUrl()

jQuery.ajax({
    url: "<?php echo $this->getUrl('testing/queue/purchase') ?>",
    type: "POST",
    success: function (res) {
        console.log(res);
    }
});

If above code still showing error of form key, then try GET instead of POST

0

All possible solutions are:-

The right way is, inject the UrlInterface in you model block or whatever class constructor

Then call the getUrl() function

class SomeClass extends \Some\Other\Class
{

    protected $_backendUrl;

    public function __construct(
        ...........
        ...........
        \Magento\Backend\Model\UrlInterface $backendUrl,
        ...........
    ) {

        $this->_backendUrl = $backendUrl;
    }
    public function someFunction()
    {
        $params = array('some'=>'url_parameters');

        $url = $this->_backendUrl->getUrl("testing/queue/purchase", $params);
    }
}

or

You can easily get Admin url By calling

$this->getUrl('testing/queue/purchase');

Please note that "Context" type of object is loaded in the $this object

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.