jquery文件上传rails重定向

时间:2013-08-06 10:54:36

标签: javascript ruby-on-rails redirect jquery-file-upload

我正在使用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响应似乎没有起作用,我做错了什么?

谢谢你

1 个答案:

答案 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) } }