0

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

谢谢

4

1 回答 1

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) } }
于 2013-08-06T11:19:25.347 回答