2

I've a form that performs an Ajax call to a controller, but the response always is You entered an invalid Secret Key. Please refresh the page.

PereiraTech/Faturamento/Controller/Adminhtml/Ac/Index.php

<?php

namespace PereiraTech\Faturamento\Controller\Adminhtml\Ac;

class Index extends \Magento\Backend\App\Action
{
    /**
     * @var \Magento\Framework\Controller\Result\JsonFactory
     */
    protected $resultJsonFactory;

public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory 
        )
    {
        parent::__construct($context);
        $this->resultFactory = $resultJsonFactory;
    }

    public function execute()
    {
        return $this->resultJsonFactory->create()->setData(['a' => 'b']);
        //return 'test string';
    }

    public function indexAction(){

        //echo 'test string';
    }
}

PereiraTech/Faturamento/view/adminhtml/web/js/form/element/options.js

define([      
    'jquery',
    'uiRegistry',  
    'Magento_Ui/js/form/components/button',
    'Magento_Ui/js/modal/modal'
], function ($,uiRegistry, select, modal) {
    'use strict';

    return select.extend({


    action: function(){            
            var ajaxRequest;
            var param = 'ajax=1';
            ajaxRequest = jQuery.ajax({                
                url: "http://localhost/magento/admin_ptech/faturamento_fat/ac/index",
                type: 'GET',
                data: {param, form_key: window.FORM_KEY},
                dataType: 'json'
            });
                //Show successfully for submit message
            ajaxRequest.done(function (response, textStatus, jqXHR) {
                console.log(textStatus);
                console.log(response);
            });

                //On failure of request this function will be called
            ajaxRequest.fail(function (xhr, status, error) {
                console.log(status);
                console.log(error);
                console.log(xhr.responseText);
                //show error
                console.log('rou');
            });
            return this._super();
        },
    });
});

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="faturamento_fat" frontName="faturamento_fat">
            <module name="PereiraTech_Faturamento"/>
        </route>
    </router>
</config>

If I call just /faturamento_fat/ac/index/ I receive the dashboard html, so I've put the full url to post method.

Edit: If I change from GET to POST, the returned value is a 500 Internal server error problem

  • did you try /admin_ptech//faturamento_fat/ac/index ? – magefms Apr 14 at 3:32
  • @magefms Yes, it returns 404 because the post url became localhost/admin_ptech/faturamento_fat/ac/index – Murilo Pereira Apr 14 at 4:08
0

I have created a sample admin ajax sample extension for you.

Link >> https://github.com/magento1993/adiminajax

Also, you can upload your extension in git so I can check and solve.

0

The problem was in the type of the request, changing for POST action I was receiving 500 Internal error server, debugging this, I found that the problem was in the PHP file:

This line

$this->resultFactory = $resultJsonFactory;

Should be

$this->resultJsonFactory = $resultJsonFactory;

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.