是否可以在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对象(它为空),但这是另一个问题。谢谢你的帮助。
答案 0 :(得分:3)
使用AJAX时,您的浏览器不会请求显示页面。
重定向只是将客户端指向不同的URL以获取响应,并且当使用AJAX执行此操作时,浏览器只是从新位置获取AJAX响应。如果您正在加载页面,则重定向意味着只是从其他位置加载数据。
换句话说,对AJAX请求的响应永远不会改变浏览器页面本身。您需要使用JavaScript代码来完成此操作。从POST处理程序返回一个URL,然后使用window.location = newurl
。
答案 1 :(得分:2)
我认为要实现你想要的你不能将金字塔重定向返回到ajax调用。
使用status和redirect url
返回json数据然后在前端,您可以重定向用户成功
window.location = http://redirecturlhere