【问题标题】:Pyramid HTTP redirect after AJAX postAJAX 发布后的金字塔 HTTP 重定向
【发布时间】:2012-12-29 17:29:47
【问题描述】:

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

这是我的 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 对象(它为空),但这是另一个问题。感谢您的帮助。

【问题讨论】:

    标签: jquery python ajax pyramid http-redirect


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      返回带有状态和重定向url的json数据

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

      window.location = http://redirecturlhere

      【讨论】:

      • 这个问题与 Pyramid 无关。从 AJAX 调用触发重定向是不可能的。它必须在客户端执行,作为在接收和处理服务器返回的数据后运行的代码的一部分。
      • 有没有办法在服务器上做到这一点?我有一个 javascript 解决方案可以执行您建议的相同操作,但我真的希望避免对服务器进行任何不必要的调用。
      • @JeffCompton 只是从你的 html 中做一个传统的表单帖子,(不要使用 ajax)?然后你可以在服务器上处理重编
      • @CRUSADER,这很令人失望。谢谢您的答复。我想我坚持用 javascript 来做。
      猜你喜欢
      • 2018-12-24
      • 2012-11-18
      • 1970-01-01
      • 2022-08-10
      • 2013-05-22
      • 2016-10-04
      • 2021-12-31
      • 2013-11-11
      相关资源
      最近更新 更多