You should thank Anthony. He wrote that code. ;-) On Tuesday, 22 January 2013 08:47:53 UTC-6, c0nstin3 wrote: > > Excellent! > > Thanks Massimo, it worked perfectly! > > On Monday, 21 January 2013 19:32:18 UTC, Massimo Di Pierro wrote: >> >> Assuming your ajax callback function is correctly called you just need to >> do: >> >> redirect(location, client_side=True) >> >> instead of >> >> redirect(location) >> >> With client_side = True you are handling the redirect client-side and not >> server side. This is designed to work over ajax requests. >> >> >> On Monday, 21 January 2013 12:58:03 UTC-6, c0nstin3 wrote: >>> >>> Hi everyone, >>> >>> >>> Could someone please help me with a problem I'm having with the * >>> amazing* web2py framework? >>> >>> >>> This is hard to explain, so please bear with me, I'm still new to web >>> development :) >>> >>> >>> I seem to have a problem with using redirect in a function that is >>> called via ajax. I thought I could use web2py_component method to call a >>> method that returns a form (using SQLFORM or CRUD) and when the form is >>> processed OK I could redirect to another method and have the content of >>> that method returned instead. >>> >>> >>> Everything is OK if I just add records, or edit records or delete >>> records BUT when I edit or delete a record and then try to add a record >>> something odd happens. Basically, when I delete a record I redirect back to >>> the index page (to reload the grid). The grid is rendered OK BUT when a add >>> a new record (using the form included in the index page) the WRONG METHOD >>> is called. I can see from the debug that the delete method is called. I >>> presume its all to do with me doing a redirect from within a .load file >>> that has been rendered via web2py_component. >>> >>> >>> I have page that I load a tabbed display into using ajax >>> (web2py_component). The tabs are labelled Contacts, Documents, Widgets etc. >>> When I click on the Contacts tab I use ajax to call contacts/index and >>> display the what is returned into the tab-content div. Everything is OK at >>> this point. >>> >>> >>> @auth.requires_login() >>> >>> def index(): >>> >>> company_id = request.args[0] >>> >>> crud.settings.hideerror=True >>> >>> >>> db.contact.company.default = company_id >>> >>> >>> grid = create_grid(db.contact.company == company_id, company_id) >>> >>> form = crud.create(db.contact, next=URL('contacts', 'index', >>> args=company_id, user_signature=True)) >>> >>> submit_btn = form.element(_type='submit') >>> >>> submit_btn['_class']='btn btn-small btn-success' >>> >>> submit_btn['_value']='Save' >>> >>> return locals() >>> >>> >>> The create_grid function returns a grid and the links are like this: >>> >>> >>> links = [ >>> >>> lambda row: A('', _onclick="web2py_component('" + URL("contacts", >>> "edit", args=[row.id, company_id], user_signature=True) + "', >>> 'tabContent');", _class='icon-pencil'), >>> >>> lambda row: A('', _onclick="web2py_component('" + URL("contacts", >>> "delete", args=[row.id, company_id], user_signature=True) + "', >>> 'tabContent');", _class='icon-trash') >>> >>> ] >>> >>> If a click on a Delete link within the grid, this is what is called: >>> >>> >>> @auth.requires_login() >>> >>> def delete(): >>> >>> contact_id = request.args[0] >>> >>> company_id = request.args[1] >>> >>> crud.settings.hideerror=True >>> >>> >>> contact = db.contact[contact_id] or redirect(error_page) >>> >>> crud.delete(db.contact, contact.id, next=URL('contacts', 'index', >>> args=company_id, user_signature=True)) >>> >>> >>> The record is deleted OK and the index method is called OK and the >>> grid is re-appears. When I try to add a new record then the delete method >>> is called AGAIN rather than the index method. There is no problem adding >>> records if I don't do a delete first! >>> >>> >>> I don't understand what where I'm going wrong :( I suspect its to with >>> using web2py_component method within a partial (.load) file that was also >>> loaded via ajax and then trying to do a redirect from a method that was >>> invoked via ajax. >>> >>> >>> Kind Regards, >>> >>> Chris >>> >>> >>>
--