In order for web2py to submit forms inside LOAD components via Ajax, it
must set up its own event handler to "trap" the form submission, so it can
be intercepted -- this is done here:
https://github.com/web2py/web2py/blob/master/applications/welcome/static/js/web2py.js#L307
.
If you don't want web2py to trap the form, try:
<form class="no_trap" ...>
Alternatively, create the entire form via Javascript *after* the component
has been loaded.
Anthony
On Friday, May 31, 2019 at 3:57:50 PM UTC-5, Vlad wrote:
>
> sorry for keeping posting about this. I am just totally stuck. I am sure
> that I am missing something very basic. Here is the complete code:
>
> <form action="{{=URL('credit_card_saved')}}" method="post" id=
> "payment-form2">
> <button>Submit</button>
> </form>
>
>
> <script>
>
>
> function CustomizeFormSubmission2(event) {
> event.preventDefault();
> var form = document.getElementById('payment-form2');
> var element = document.createElement('input');
> element.setAttribute('type', 'hidden');
> element.setAttribute('name', 'stripeToken');
> element.setAttribute('value', "THIS_IS_TOKEN");
> form.appendChild(element);
> form.submit();
> }
>
>
> var form = document.getElementById('payment-form2');
> form.addEventListener('submit', CustomizeFormSubmission2);
>
>
> So when this is placed in the view straight - it's perfect. Behaves as
> expected.
>
> However, if it's placed into the component via LOAD, it grossly
> malfunctions. Not only the post_vars is empty, but even
> event.preventDefault();
>
> doesn't work either (if I remove form.submit, it's still immediately
> submitting the form).
> What am I missing about how LOAD is expected to operate?? How do I make it
> work??
>
>
> On Friday, May 31, 2019 at 3:41:14 PM UTC-4, Vlad wrote:
>>
>> I've narrowed down what's going on, but still stuck...
>>
>> this is how the form is being submitted (from inside of the component):
>>
>> function stripeTokenHandler(token) {
>> var form = document.getElementById('payment-form');
>> var hiddenInput = document.createElement('input');
>> hiddenInput.setAttribute('type', 'hidden');
>> hiddenInput.setAttribute('name', 'stripeToken');
>> hiddenInput.setAttribute('value', token.id);
>> form.appendChild(hiddenInput);
>> form.submit();
>> }
>>
>> it seems to me that document.createElement('input') doesn't create an
>> element under the topmost document (I don't really understand this well,
>> but when this code is in the main html - not in the component- it works
>> correctly and submits the proper data to the form action url)
>>
>> I just can't think of anything else here - those variables that are
>> hardcoded in the form, i.e. not submitted via created on the fly in input
>> fields - are passed over correctly.
>>
>> Greatly appreciate some help...
>>
>> On Friday, May 31, 2019 at 2:38:06 PM UTC-4, Vlad wrote:
>>>
>>> I am loading a component with LOAD. the component has the form on it.
>>> the form is submitting via post method.
>>>
>>> request.post_vars is empty. the variables don't go through.
>>>
>>> when I copy the same very code and pasting it in the view (i.e. instead
>>> of the LOAD component - while taking the LOAD line out) - with not even a
>>> single change, just copy and paste -
>>> request.post_vars is correct - filled with whichever parameters are
>>> coming from the form.
>>>
>>> is this a feature or a bug? :)
>>>
>>> is there something subtle I am missing about those components? I've
>>> tried both - loading the component with ajax true and ajax false - same
>>> thing. And the same thing happens when I tried to submit with get method.
>>>
>>> Other than not having vars set - everything else functions right. The
>>> form is submitted...
>>>
>>> Any ideas?
>>>
>>>
>>>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/fab650af-3326-4a7b-a394-05eca5bb56ea%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.