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
>>>
>>>
>>>
--