2012-10-26 127 views
0

我想知道如何使我的请求在我的视图中使用ajax工作,而我想将用户重定向到其他页面。例如,当用户成功发送他/她的电子邮件时,我想将他/她重定向到其他页面。我应该怎么做才能使这个请求与Ajax一起工作?重定向url使用ajax

我有这个功能在views.py:

def compose(request, recipient=None, success_url=None, recipient_filter=None): 
    if request.is_ajax():   
     if request.method == "POST": 
      sender = request.user 
      form = compose_form(request.POST, recipient_filter=recipient_filter) 
      if form.is_valid(): 
       // do some processing 
       if success_url is None: 
        success_url = reverse('messages_inbox') 
       if request.GET.has_key('next'): 
        success_url = request.GET['next'] 
       return HttpResponseRedirect(success_url) 
    else: //rest of function 

我检查,例如“messages_inbox”,与阿贾克斯传递请求。那么这是怎么回事?

+1

发表您的JavaScript即可。 – jpic

回答

1

视图不是在ajax请求的情况下应该重定向的视图。而是让视图返回success_url到ajax调用,然后使用成功回调来重定向用户。

示例使用jQuery

$.ajax(url, data, function (data, response, xhr){ 
    ... 
    var url = success_url; //Get success url from your data which is a json response object 
    $(location).attr('href',url); 
}); 

你可以做重定向没有jQuery的为好,看到 How to redirect to another webpage in JavaScript/jQuery?

+0

然后,我们将如何访问会话变量或该页面中的请求属性,因为视图不会呈现响应。 – cafebabe1991

+0

现有的会话/请求属性已经可用在页面http://stackoverflow.com/questions/2551933/django-accessing-session-variables-from-within-a-template。如果你想从重定向的请求获得会话信息,那么Ajax的回调函数中的'response'将会包含头文件,你可以访问这些头文件来获取会话相关信息。 –

+0

但在你提到的问题,你提到的链接..它使用渲染来响应..并且你能展示如何从头文件中检索信息 – cafebabe1991