繁体   English   中英

AJAX发布后的金字塔HTTP重定向

[英]Pyramid HTTP redirect after AJAX post

在jquery发布到服务器后,是否可以重定向到另一个页面? 用户登录后,我想返回一个json响应或重定向到另一个页面。 我知道正在调用正确的视图callable,因为我可以从服务器看到一个日志语句。

这是我的jquery帖子:

function postToServer(url, params) {
    $.ajax({
        type: 'POST',
        url: url,
        data: JSON.stringify(params),
        contentType: 'application/json; charset=utf-8',
        statusCode: {
            200: function (data, textStatus, jqXHR) {
                return data;
            },
            201: function (data, textStatus, jqXHR) {
                return data;
            },
            400: function(data, textStatus, jqXHR) {
                return data;
            }
        }
    });
}

这是非常基本的,似乎运作良好。 每当我返回json时,它都会正确处理响应。

以下是我的观点:

#LOGIN
class LoginView(object):
    def __init__(self, request):
        self.request = request
        self.ctx = core.context()

    @view_config(route_name="login", request_method='GET')
    def get(self):
        template = "project:templates/login/login.mak"
        context = {}
        return render_to_response(template, context, request=self.request)

    @view_config(route_name="login", request_method='POST')
    def post(self):
        url = self.request.route_url('dashboard')
        print 'url: ' + url        
        #log user in and get credentials

        json = getJsonCredentialsObject()
        return Response('json', json)

#DASHBOARD
class DashboardView(object):
    def __init__(self, request):
        self.request = request
        self.ctx = core.context()

    @view_config(route_name="dashboard", request_method='GET')
    def get(self):
        print "in dashboard"
        template = "project:templates/dashboard/dashboard.mak"
        session = self.request.session
        context = {}
        return render_to_response(template, context, request=self.request)

我想在Login类中使用post方法来处理交互,但是当我尝试使用“return HTTPFound(location = self.request.route_url('/ dashboard'))重定向到这里时”没有任何反应。 我也无法从请求中获取request.json_body对象(它为空),但这是另一个问题。 谢谢你的帮助。

使用AJAX时,您的浏览器不会请求显示页面。

重定向仅仅是将客户端指向不同的URL以获取响应,并且当使用AJAX执行此操作时,浏览器只是从新位置获取AJAX响应。 如果您正在加载页面,则重定向意味着只是从另一个位置加载数据。

换句话说,对AJAX请求的响应永远不会改变浏览器页面本身。 您需要使用JavaScript代码来完成此操作。 从POST处理程序返回一个URL,然后使用window.location = newurl

我认为实现你想要的你不能返回金字塔重定向到ajax调用。

使用status和redirect url返回json数据

然后在前端,您可以重定向用户成功

window.location = http://redirecturlhere

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM