cancel
Showing results for 
Search instead for 
Did you mean: 

Ajax Call

SOLVED

Ajax Call

I have some questions on an Ajax call in admin area.

This code returns an error:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Vendor\Module\Controller\Adminhtml\Index\Customajax::__construct(), 1 passed 

 

<?php
namespace Vendor\Module\Controller\Adminhtml\Index;

class Customajax extends \Magento\Backend\App\Action
{
    protected $resultPageFactory;
    protected $resultJsonFactory;

    public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\Controller\Result\JsonFactory $resultPageFactory,
        \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory

    ) {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
         $this->resultJsonFactory = $resultJsonFactory;
    }

    public function execute()
    {
        if($this->getRequest()->isAjax()){
         

         return  $this->resultJsonFactory->create()->setData(['Test-Message' => 'hi']);
        }

         return  $this->resultJsonFactory->create();
    }
}

 

Also, I would like to know how to get base url :

define([
    'jquery',
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select',
    'Magento_Ui/js/modal/modal',
    'mage/url'
], function ($, _, uiRegistry, select, modal, url) {
    'use strict';

    return select.extend({

        /**
         * On value change handler.
         *
         * @param {String} value
         */
        onUpdate: function (value) {
            console.log('Selected Value: ' + value);

            var field1 = uiRegistry.get('index = field1');

              var field2 = uiRegistry.get('index = field2');
              field2.hide();
              var field3Depend1 = uiRegistry.get('index = field3Depend1');

             var linkUrl = url.build('index/customajax');
  
                    $.ajax(
                        url: '../../'+linkUrl,
                        showLoader: true,
                        data: {form_key: window.FORM_KEY, 'value':value},
                        type: "POST",
                          dataType : 'json',
                        success: function(result){
                         
                            alert(result);
                        }
                    });


         return this._super();
        },
    });
});

 

1 ACCEPTED SOLUTION

Accepted Solutions

Re: Ajax Call

Hello @tvgarden,

 

Please run below command in Magento root directory and try it

rm -rf generated/
php bin/magento setup:static-content:deploy -f 

When you get this type of error Uncaught ArgumentCountError: Too few arguments, Please remove generate folder then try it.

 

--
If my answer is useful, please Accept as Solution & give Kudos

View solution in original post

3 REPLIES 3

Re: Ajax Call

Hello @tvgarden

 

Remove your generated folder and then check your work.

 

Moreover, you have added the duplicate class in your __construct() function.

You have added the same class for $resultPageFactory and $resultJsonFactory.

 

Fixed the class name as given below

 

\Magento\Framework\View\Result\PageFactory $resultPageFactory, 
\Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory

 

And for getting the URL in your ajax call, do as given below.

 

var linkUrl = url.build('frontname/index/customajax');

$.ajax(    url: linkUrl,
    ...
... });

 

You will get the frontname of your module in app/code/Vendor/Module/etc/adminhtml/routes.xml

If you find my answer useful, Please click Kudos & Accept as Solution.

Re: Ajax Call

Hello @tvgarden,

 

Please run below command in Magento root directory and try it

rm -rf generated/
php bin/magento setup:static-content:deploy -f 

When you get this type of error Uncaught ArgumentCountError: Too few arguments, Please remove generate folder then try it.

 

--
If my answer is useful, please Accept as Solution & give Kudos

Re: Ajax Call

hi @gelanivishal @Mayur Bhuva

 

Thank you for the replies.

I did both solutions and it finally worked.


@gelanivishal wrote:

Hello @tvgarden,

 

Please run below command in Magento root directory and try it

rm -rf generated/
php bin/magento setup:static-content:deploy -f 

When you get this type of error Uncaught ArgumentCountError: Too few arguments, Please remove generate folder then try it.

 

--
If my answer is useful, please Accept as Solution & give Kudos