发布ajax调用django视图后重定向到不同的页面

时间:2016-11-30 03:59:14

标签: javascript ajax django

我一直试图让这段简单的代码正常工作,但仍然无法做到。经历了多个其他链接。我无法弄清楚我做错了什么。我有一个javascript函数submitData(),它只需要对django视图进行ajax post调用。 django视图基本上只需检查请求是否为post,如果是,则必须重定向到另一个页面。

我的javascript函数submitData()如下所示,并且还添加了代码部分,负责发送csrf令牌以及post请求。

function submitData()
    {
      $.post('/loggedin/',{"fname":"name1","lname":"name2"},function(data){
        alert("Back from views.py");

      });
    }

$(function () {
        $.ajaxSetup({
            headers: { "X-CSRFToken": getCookie("csrftoken") }
        });
    });

function getCookie(c_name)
    {
        if (document.cookie.length > 0)
        {
            c_start = document.cookie.indexOf(c_name + "=");
            if (c_start != -1)
            {
                c_start = c_start + c_name.length + 1;
                c_end = document.cookie.indexOf(";", c_start);
                if (c_end == -1) c_end = document.cookie.length;
                return unescape(document.cookie.substring(c_start,c_end));
            }
        }
        return "";
     }

在我的views.py中,我有以下代码,

def loggedin(request):
    if request.method == "POST":
        fname = request.POST.get('fname')
        print fname #The code comes here, prints the fname
        args = {}
        args.update(csrf(request))
        return render_to_response('loggedout.html',args,context_instance=RequestContext(request)) #This does not redirect to a different page
    print "outside in loggedin"
    args = {}
    args.update(csrf(request))
    return render_to_response('loggedin.html',args, RequestContext(request))

当进行post调用时,会打印fname,但是假设由函数render_to_response()发生的重定向不会发生。而是返回post调用,并在post调用"返回views.py"警报。我不确定我错过了什么。

1 个答案:

答案 0 :(得分:2)

使用javascript成功完成post后,您可以重定向。

function submitData()
    {
      $.post('/loggedin/',{"fname":"name1","lname":"name2"},function(data){
        alert("Back from views.py");
        window.location = 'yourpage.hmtl'
      });
    }

如果您要回复发送网页名称,可以使用data重定向到网页。