我正在使用jquery-file-upload来上传文件。
文件上传完毕后,我想重定向到上传文档的编辑路径。
我使用javascript提交文件:
return data.submit();
文件上传完成后,如何重定向到edit_document_path,我尝试了以下代码:
$('#fileupload')
.bind('fileuploadstop', function (e, data) {
window.location.href = "#{edit_document_path(@document)}";
})
有没有办法可以存储或返回上传文件的ID(甚至更好的@document本身),以便我可以通过js重定向?
我的js直接在html.haml文件中
%script(type="text/javascript")
$('#new_document').fileupload({
dataType: 'json',
add: function (e, data) {
jqXHR = data.submit()
},
done: function (e, data) {
window.location = json.url
},
progress: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('.bar').css('width', progress + '%');
}
});
这是我的控制器:
def upload
@document = Document.new(params[:document])
respond_to do |format|
format.json { render json: { url: edit_document_path(@document) } }
end
end
然而,由于页面没有重定向,JSON响应似乎没有起作用,我做错了什么?
谢谢你
答案 0 :(得分:0)
你需要考虑几件事。首先,您必须能够获取编辑操作的URL。如果您的js在页面中而不在资产文件中,则以下更改应该有效。
jqXHR = data.submit()
.complete(function() { window.location = "#{url here}" })
如果您使用的是<%= %>
而不是erb
,则还需要使用#{...}
。如果这是在资产文件中,则您无权访问实例变量,因此您必须依赖服务器的响应。例如,您可以将响应设置为json
。
$('#fileupload').fileupload({
dataType: 'json',
add: function(json) {
jqXHR = data.submit()
.complete(function() { window.location = json.url })
}
})
因为您正在使用上面的json.url
,所以它希望您在json响应中返回url,以便在控制器中将以下内容添加到respond_to
块
format.json { render json: { url: edit_document_path(@document) } }