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