>> If the db update failed in the regular controller I would assume that
>> a ticket page would appear. But what if the db update is in a callback
>> function?


>In that case, an error ticket will still be logged, and web2py will return
>the usual 500 error with the link to the ticket.

Anthony, I don't think that always happens.

Some failures in an ajax callback will log a ticket but not flash 500
error with the link to the ticket.

When I'm playing with ajax I always keep the error page open on
another tab, sometimes even in a different browser window if I'm
feeling paranoid about browser conflicts.  If I'm getting unexpected
results I refresh the error page and often find hidden tickets there.

Cliff Kachinske

On Sep 12, 10:20 am, Anthony <abasta...@gmail.com> wrote:
> On Monday, September 12, 2011 1:00:41 AM UTC-4, Noel Villamor wrote:
>
> > If the db update failed in the regular controller I would assume that
> > a ticket page would appear. But what if the db update is in a callback
> > function?
>
> In that case, an error ticket will still be logged, and web2py will return
> the usual 500 error with the link to the ticket. However, nothing will
> happen on the client side unless you include some JS to handle such errors.
> For example, you might register a jQuery .ajaxError handler
> (http://api.jquery.com/ajaxError/). You should be careful about the message
> you flash, though -- it's possible that the record could update but another
> error occurs -- in that case, you don't want to flash a message saying the
> record did not update.  
>
>
>
> > @Anthony, it seems that a db update failure would cause the rest of
> > the callback code to be not executed and so the flash='failure'
> > message won't appear at all.
>
> Yes, it depends on the reason for the failure. If, for example, you try to
> update with a record id that doesn't exist, you won't get an error -- it
> will just return 0 as the number of rows updated. If you want to catch
> particular database errors on the server side, I suppose you could do
> something like this:
>
> try:
>     db(db.tbl.id==100).update(data='sampledata')
>     flash='success'
> except IntegrityError, OperationalError:
>     flash='failure'
>     # possibly log this somehow
> # All other exceptions result in 500 error to be handled client side.
>
> Anthony

Reply via email to