When using the component in isolation everything works fine (the parameters are passed fine) but I have this problem when running the parent page that LOADs several instances of this component. I have printed the values of vuelo.id and preorden_vuelo.pedido on my template and, while they are printed in the same order as the loaded components and print their respective values fine, I noted that doesn't matter in what component I execute the action it always pass the last printed parameters (even if the component loaded first).
In the parent page I am not able to see the entire code with the DOM inspector because in that page I have only a bunch of LOAD calls but not the code for each component, that is why I started to print vuelo.id and preorden_vuelo.pedido in the component template. El martes, 3 de enero de 2017, 12:24:48 (UTC-5), Anthony escribió: > > Using the browser's DOM inspector, confirm that the URL in the following > code has the expected value of pid: > > ajax('<?=URL('confirmar_pedido', 'pedir', vars={'vid':vuelo.id, 'pid > ':preorden_vuelo.pedido})?>', [], target=null > > If so, what happens when you click the action button? Does the browser > make an Ajax request to that exact URL, and does your pedir() function then > receive the proper value of pid? > > Anthony > > On Tuesday, January 3, 2017 at 11:06:33 AM UTC-5, Bernardo Leon wrote: >> >> Hi, I have a component which has a button that performs an action when >> clicked but I want the user accept some terms before executing that action. >> I found Sweet Alert (http://t4t5.github.io/sweetalert/) so I am trying >> to use their confirm dialog between the click and the action. Since Sweet >> Alert is entirely javascript (and css) I am calling my action using the >> *ajax* method passing the parameters the controller gives to the view. >> >> The problem I am facing is that the action receives wrong values in >> request.vars. Every time I click the action button I receive a different >> parameter. Why is that? >> >> This is my component controller: >> >> def vuelo_ofertante(): >> response.delimiters = ('<?', '?>') >> vuelo_id = request.vars['vid'] >> pedido_id = request.vars['pid'] >> vuelo = db(db.viajes.id == vuelo_id).select(db.viajes.ALL).first() >> lugar_vuelo = db(db.lugares.id == >> vuelo.lugar).select(db.lugares.nombre, db.lugares.lugar_padre).first() >> >> if lugar_vuelo is None: >> texto_lugar = '' >> else: >> lugar_padre_vuelo = db(db.lugares.id == >> lugar_vuelo.lugar_padre).select(db.lugares.nombre).first() >> if lugar_padre_vuelo is not None: >> texto_lugar = lugar_vuelo.nombre + ' (' + >> lugar_padre_vuelo.nombre + ')' >> else: >> texto_lugar = lugar_vuelo.nombre >> >> preorden_vuelo = db((db.preordenes.viaje == vuelo.id) & >> (db.preordenes.pedido == pedido_id)).select(db.preordenes.ALL).first() >> >> return dict(vuelo=vuelo, lugar_vuelo=texto_lugar, >> *preorden_vuelo=preorden_vuelo*) (1) >> >> def pedir(): >> id_viaje = request.vars['vid'] >> *id_pedido = request.vars['pid'] #*I always get a random value here >> where I expect to get* the preorden_vuelo.pedido *(1) value that I am >> returning in the vuelo_ofertante method >> >> and this is my component's .load view: >> >> <div class="well well-lg<?if preorden_vuelo.preorden_aprobada:?> >> well-green<?pass?>"> >> <?if preorden_vuelo.preorden_aprobada:?> >> <span class="glyphicon glyphicon-ok"></span> >> <b><?=T('Gracias!')?></b> >> <?pass?> >> <b><?=T('Fecha de retorno: ')?></b><?=vuelo.fecha_retorno?> >> <br> >> <b><?=T('Lugar: ')?></b> >> <?if vuelo.lugar is not None:?> >> <?=lugar_vuelo?> >> <?else:?> >> <?=T('No especificado')?> >> <?pass?> >> <br> >> <?if preorden_vuelo.preorden_aprobada is False:?> >> <br> >> <?=T('Costo: ')?><b>$<?=preorden_vuelo.costo_cliente?></b> >> <br> >> <br> >> <a class='btn btn-primary' >> onclick='confirmacion();'><?=T('PEDIR')?></a> <!-- does not work --> >> <!-- <?=A(T('PEDIR'), _class='btn btn-primary', >> callback=URL('confirmar_pedido', 'pedir', vars={'vid':vuelo.id, >> 'pid':preorden_vuelo.pedido}))?> --> <!-- Does work as expected but I don't >> know how to use Sweet Alert here --> >> <?pass?> >> <script> >> function swal_aceptado(){ >> swal({ >> title: "<?=T('Muchas gracias!')?>", >> text: "<h4><?=T('Nos comunicaremos con >> usted.')?></h4>", >> html: true, >> type: "success", >> allowEscapeKey: false, >> confirmButtonText: "<?=T('Entendido')?>" >> }, function(){ >> eval("ajax('<?=URL('confirmar_pedido', >> 'redireccionar')?>', [], target=null)"); >> }); >> } >> >> function confirmacion(){ >> swal({ >> title: "<?=T('Esta a punto de llevar a cabo un >> acuerdo')?>", >> text: '<h4><?=T('Asegurese que a leído y aceptado >> nuestros ')?><?=A(T('términos y condiciones'), _href=URL('default', >> 'eula'))?></h4>', >> html: true, >> type: "info", >> showCancelButton: true, >> allowOutsideClick: true, >> confirmButtonText: "<?=T('Estoy de acuerdo!')?>", >> cancelButtonText: "<?=T('Cancelar')?>", >> closeOnConfirm: false, >> showLoaderOnConfirm: true >> }, function() { >> setTimeout(function(){ >> <?print vuelo.id, preorden_vuelo.pedido?> >> ajax('<?=URL('confirmar_pedido', 'pedir', >> vars={'vid':vuelo.id, *'pid':preorden_vuelo.pedido*})?>', [], >> target=null); >> //eval("ajax('<?=URL('confirmar_pedido', 'pedir', >> vars={'vid':vuelo.id, 'peid':preorden_vuelo.pedido})?>', [], >> target=null)"); >> swal_aceptado(); >> }, 500); >> }); >> } >> </script> >> </div> >> >> Any help will be greatly appreciated. Thank you guys! >> >> -- 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.