0

jquery-file-upload を使用してファイルをアップロードしています。

ファイルのアップロードが完了したら、アップロードされたドキュメントの編集パスにリダイレクトしたいと考えています。

ファイルを送信するためにjavascriptを使用しています:

return data.submit();

ファイルのアップロードが完了したら、どのように edit_document_path にリダイレクトできますか? 次のコードを試しました:

$('#fileupload')
    .bind('fileuploadstop', function (e, data) {
        window.location.href = "#{edit_document_path(@document)}";
    })

js を介してリダイレクトできるように、アップロードされたドキュメントの ID (または @document 自体) を保存または返す方法はありますか?


編集

私はhtml.hamlファイルに直接jsを持っています

%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 に答える