我有一个在save
之后没有重定向的Backbone应用程序。我不知道这是否与Backbone或服务器端代码有关。
在服务器上:
url = request.route_url('test')
return HTTPFound(location=url)
我可以看到location
在响应标头中正确设置为/test
。
1,但{@ 1}}请求200 OK,但页面未重定向。
答案 0 :(得分:5)
因为您通过使用AJAX请求(Backbone save
文档:http://backbonejs.org/#Model-save)进行保存,所以客户端不会被服务器响应重定向。这不仅仅是因为Backbone,这是AJAX请求的本质。如果要在成功保存后重定向,则需要通过在success
的{{1}}选项中设置回调来手动执行此操作。 save
回调将给出三个参数,模型,响应和选项(按此顺序),因此您可以使用服务器的响应来重定向。
在您的服务器中,您应该使用保存的模型呈现为JSON对象来响应成功保存。我做了什么然后重定向页面是我将目标位置添加到响应标头的location属性。您可以从成功回调中的success
对象获取xhr
属性,并在其上调用options
以获取该位置,然后将getResponseHeader('location')
指向该处:
window
我对Pyramid不太熟悉,所以如果有人想用最好的方法来编辑这个答案,那么返回JSON对象并修改服务器中的响应位置标题就行了。 According to these docs和these docs,它看起来应该是这样的:
model.save({}, {
success: function(model, response, options){
window.location = options.xhr.getResponseHeader('location');
})
});
当然,您需要更改实际保存对象的所有内容,而不是创建示例from pyramid.view import view_config
class MyObject(object):
def __init__(self, x):
self.x = x
def __json__(self, request):
return {'x':self.x}
@view_config(renderer='json')
def object(request):
request.response.location = "http://LocationToRedirectTo.com"
return MyObject(1)
# the JSON value returned by ``object`` will be:
# {"x": 1}
对象。