【问题标题】:Make redirect url work with ajax使重定向 url 与 ajax 一起工作
【发布时间】:2012-10-16 13:24:08
【问题描述】:

我想知道如何让我的请求在我的视图中使用 ajax,同时我想将用户重定向到其他页面。我的意思是,例如,当用户成功发送他/她的电子邮件并且我想将他/她重定向到其他页面时。我应该怎么做才能使这个请求与 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”,即使用 ajax 传递的请求。那怎么办?

【问题讨论】:

    标签: jquery ajax django django-views


    【解决方案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?

    【讨论】:

    • 那么我们将如何访问该页面中的会话变量或请求属性,因为视图没有呈现响应。
    • 现有的会话/请求属性在页面stackoverflow.com/questions/2551933/… 中已经可用。如果您想要重定向请求中的会话信息,ajax 回调函数中的response 将具有您可以访问会话相关信息的标头。
    • 但是在你提到的问题中..它使用渲染来响应的链接..你能展示如何从标题中检索信息
    • api.jquery.com/jQuery.ajax 中检查getAllResponseHeaders() 并确保您了解CORS,如果它与您的情况相关stackoverflow.com/questions/2870371/…
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 2013-01-30
    • 2021-08-25
    • 2014-01-25
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多