【问题标题】:Redirecting to a different page after post ajax call made to django view在对 django 视图进行 ajax 调用后重定向到不同的页面
【发布时间】:2016-11-30 03:59:13
【问题描述】:

我一直试图让这段简单的代码正常工作,但仍然无法做到。已经通过多个其他链接。我无法弄清楚我做错了什么。我有一个 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 调用“Back from views.py”中的警报语句。我不确定我错过了什么。

【问题讨论】:

  • 请出示render_to_response的代码
  • loggedin() 中的 views.py 函数有 render_to_response()。我只是使用 django 的 django.shortcuts 库提供的 render_to_response() 函数。代码如下?
  • 这里根本没有重定向。

标签: javascript ajax django


【解决方案1】:

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

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

或者,如果您要发送页面名称作为响应,您可以使用data 重定向到页面。

【讨论】:

  • 但我认为它只是对您的 ajax 调用发送响应。
  • 这种方式可行...但是从 django 视图本身不能做同样的事情吗?
  • 我不这么认为,因为您正在发送 ajax 电话,而 ajax 应该是这样的。
  • 好的...谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2012-04-24
  • 2017-05-07
  • 2019-01-24
  • 2014-06-28
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多