Hi!
I have the same problem (twice submission). Here is my little test:

#paste in default.py
#!!! for pure test clean cookies before run!!!

def print_form_keys():
    ret=DIV(_class="container")
    for i in xrange(5):
        frm_k= '_formkey[%s]' % ('frm_id%s/create'%i) #- see html.FORM
        ret.append( DIV( frm_k,
                        OL(*(session[frm_k] or ['None']))
                        )
                  )
    return dict(r=ret)

def ajx_bug():
    form_name='frm_id%s'%request.args(0)
    form=SQLFORM.factory(Field('any'), table_name=form_name)
    if form.process(session=session).accepted:
        response.flash=form.vars.any
    return dict(form=form)

#------------ CALL THIS --------------------
def many_ajx_form():
    ret={}
    for i in xrange(5):
        ret['ajx_frm_%s'%i]= \
        DIV(
            LOAD('utils','ajx_bug.load',
                 args=[i],
                 ajax=True,
                 target='cont_%s'%i
                 ),
            _id='cont_%s'%i
           )

    #----------- ajax print session -----------------
    data=dict(
           rmt= '/%s/default/print_form_keys.load'%request.application,
           trg='print_session'
             )
    scr=SCRIPT("""
            var i=0
            var ajx_forms_num=5
            $( document ).ajaxComplete(function(e)
            {
                print_session();
                $("form").submit( print_session);
            });

            function print_session(e)
             {
                if ((++i)==ajx_forms_num)
                {
                    $.web2py.component("%(rmt)s", "%(trg)s", 0, 1, 
$("#%(trg)s"));
                }
             };
            """%data)
    ret['scr']=scr
    ret['print']=DIV(_id='print_session')
    return ret

Result on local (win7x32, 2.12.1-stable+timestamp.2015.08.07.07.22.06   
(Running 
on Rocket 1.2.6, Python 2.7.9)):

Many Ajx Form
ajx_frm_0:
Any:
ajx_frm_1:
Any:
ajx_frm_2:
Any:
print:
_formkey[frm_id0/create]
   
   1. *None*

_formkey[frm_id1/create]
   
   1. *None*

_formkey[frm_id2/create]
   
   1. *41f6606c-f149-4382-9216-a35d205a3bd*


As seen, only one ajax form (frm_id2) has a formkey and it works properly! 
but other require twice submissions.
 It seems, that during ajax-request session locked for write only but not 
for read!
Keep in mind that browsers starts next  ajax-request before completion of 
previous one.
I put some log-code in  *FORM.accepts*  - it writes session's all formkeys 
every FORM.accepts-call to separated files  (one call - one file) and I got 
the same:
In each file there is only  one (but different) formkey! i.e. each 
ajax-request process has own version of session.
If set session=None   ( *form**.process( session = None )*  )  all works 
fine!



-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to