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

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

2 Answers 2

1

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;

1
  • Did you figure it out why is not working when you use GET?
    – Ciprian
    Commented Aug 7, 2020 at 13:37
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.

4
  • If you could take a look at my code, here's the source github.com/murilopereirame/Faturamento Commented Apr 14, 2019 at 13:10
  • I am unable to understand the language which you used in extension Commented Apr 14, 2019 at 16:54
  • PHP, XML, JS. Portuguese and English Commented Apr 14, 2019 at 17:14
  • I am saying about Portuguese, other I can understand. Commented Apr 15, 2019 at 4:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.