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


 

-- 



Reply via email to