el_*_*_le 0 python backbone.js pyramid
我有一个Backbone应用程序,不会重定向后save.我不知道这是否与Backbone或服务器端代码有关.
在服务器上:
url = request.route_url('test')
return HTTPFound(location=url)
Run Code Online (Sandbox Code Playgroud)
我可以看到在响应头中location正确设置了/test它.然后有一个200 OK的请求/test但页面没有被重定向.
因为您通过使用AJAX请求(save此处的Backbone 文档:http://backbonejs.org/#Model-save)进行保存,所以客户端不会被服务器响应重定向.这不仅仅是因为Backbone,这是AJAX请求的本质.如果要在成功保存后重定向,则需要通过在success选项中设置回调来手动执行此操作save.该success回调将有三个参数,型号,响应和选项(按顺序),所以你可以使用从服务器的响应重定向.
在服务器中,您应该使用保存的模型呈现为JSON对象来响应成功保存.我做了什么然后重定向页面是我将目标位置添加到响应标头的location属性.您可以xhr从options成功回调中的对象获取属性,并调用getResponseHeader('location')它来获取位置,然后指向该位置window:
model.save({}, {
success: function(model, response, options){
window.location = options.xhr.getResponseHeader('location');
})
});
Run Code Online (Sandbox Code Playgroud)
我对Pyramid不太熟悉,所以如果有人想用最好的方法来编辑这个答案,那么返回一个JSON对象并修改服务器中的响应位置标题就行了.根据这些文档和这些文档,它应该看起来像这样:
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}
Run Code Online (Sandbox Code Playgroud)
当然,您需要更改所有内容以实际保存对象,而不是创建示例MyObject对象.
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |