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

-- 



Reply via email to