Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Snippet Form cannot find AJAX Handler 'renderForm::onSubmit' #36

Closed
sqwk opened this issue Sep 5, 2023 · 14 comments
Closed

Snippet Form cannot find AJAX Handler 'renderForm::onSubmit' #36

sqwk opened this issue Sep 5, 2023 · 14 comments

Comments

@sqwk
Copy link

sqwk commented Sep 5, 2023

When using the "Render Form Component" snippet inside a static page (variable, not the content field), the form gets rendered to the page but cannot be submitted. On submit an alert shows up "AJAX Handler 'renderForm::onSubmit' cannot be found" and the POST to the same page produces an error 500.

When using the "Render Form Component" component inside a CMS page, everything works fine.

October v3.4.15

Plugin v3.1.2

@sqwk
Copy link
Author

sqwk commented Sep 6, 2023

The problem also occurs when downgrading the plugin to v3.0.0.

@sqwk
Copy link
Author

sqwk commented Sep 6, 2023

Changing the registerPageSnippets() method inside Plugin.php to use an absolute class name seems to fix the problem:

public function registerPageSnippets()
{
    return [
        \Renatio\FormBuilder\Components\RenderForm::class => 'renderForm',
    ];
}

@mplodowski
Copy link
Owner

Hi,

I checked this and it seems to work find with example Contact Form.

October v3.4.15
Plugin v3.1.2
Pages plugin: v1.5.12

Hmm the most weird thing is that the change you made to make it work does not make any sense.

If you:

dd(
    [\Renatio\FormBuilder\Components\RenderForm::class => 'renderForm'],
    [RenderForm::class => 'renderForm'],
);

This is exactly the same, because first one use fully qualified name and the second shortcut with use import.

@sqwk
Copy link
Author

sqwk commented Sep 6, 2023

OK, very weird. I undid the qualified name and it still works. So that was a false flag. Sorry, about that.

However, I noticed that when I edit the componentDetails()method inside RenderForm.php as below, the snippet code that is inserted in a static page changes to include <figure data-ajax=\"true\" ... and the snippet starts working.

public function componentDetails()
{
    return [
        'name' => 'renatio.formbuilder::lang.render_form.name',
        'description' => 'renatio.formbuilder::lang.render_form.description',
        'snippetAjax' => true
    ];
}

Could it be that the data-ajax is needed? (See https://docs.octobercms.com/3.x/cms/themes/snippets.html#creating-snippets-from-components)

@mplodowski
Copy link
Owner

Hi,

yes that is probably the issue here. This is a new feature of October, so I did not add it yet. Thanks for reporting this.

I published v3.1.3 where this is added.

Thanks for reporting this and help resolving this.

@xmerlin
Copy link

xmerlin commented Oct 13, 2023

Same problem here FormBuilder 4.0.2, octobercms 3.5.4 (also 3.5.x)

"AJAX handler 'renderForm::onSubmit' was not found"

@mplodowski
Copy link
Owner

Hi @xmerlin,

please write me steps to reproduce this issue.

@mplodowski mplodowski reopened this Oct 13, 2023
@xmerlin
Copy link

xmerlin commented Oct 13, 2023

added {% styles %} in head
added {% framework extras %} and {% scripts %} above script includes in the footer
added standard "Contact Form" in the homepage

"AJAX handler 'renderForm::onSubmit' was not found." when I press send

@mplodowski
Copy link
Owner

Please copy your homepage and layout file source code. Just the minimum with the form and essential code.

@xmerlin
Copy link

xmerlin commented Oct 13, 2023

layout

<link href="https://fonts.googleapis.com/css?family=Lato:300,400,400i,700|Poppins:300,400,500,600,700|PT+Serif:400,400i&display=swap" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="{{ [

....
]|theme }}" type="text/css" />
{% styles %}

...

<div id="wrapper" class="clearfix">
	{% partial "header" %}
	{% page %}
    {% partial "footer" %}
</div>

<div id="gotoTop" class="icon-angle-up"></div>

<script src="{{ [ 
	'assets/js/jquery.js',
	'assets/js/plugins.min.js',
	'assets/js/functions.js'
]|theme}}"></script>

{% framework extras %}
{% scripts %}

concact-form partial

Send us an Email

        <div class="contact-widget">
            <div class="contact-form-result"></div>
            {% component "renderForm"%}
        </div>
    </div>
</div>

@mplodowski
Copy link
Owner

I assume that you use partial and put form component inside it.

Maybe this is the isssue: https://talk.octobercms.com/t/ajax-handler-in-php-section-of-partial/1009

https://docs.octobercms.com/3.x/markup/tag/ajax-partial.html

So instead of use {% partial 'contact-form' %} try to use {% ajaxPartial 'contact-form' %}

@xmerlin
Copy link

xmerlin commented Oct 13, 2023

{% ajaxPartial 'contact-form' %} fixed the issue ...now I have to find why there is no message in the form log and/or in mailbox

@mplodowski
Copy link
Owner

I would check mail settings first. Go to Settings -> Mail Templates and click any mail template. There is a Sent test message button below. If you receive test message, then check Event Logs for any errors.

In form update page there is Options tab, where is setting to disable form logs. Check if it is not disabled.

Also to receive mail message the Mail Template field must not be empty.

@xmerlin
Copy link

xmerlin commented Oct 14, 2023

Mail Template field empty ...now it works as expected, thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants