12

私はAJAXにかなり慣れていません。AJAXを使用してサーバーにリクエストを送信しています。サービスはテキストファイルを返します。ただし、データが返されるときにダウンロードボックスは表示されません。ファイルを返すRESTサービスは次のとおりです。

@Path("/examples")
public class ExampleCodesRest {


    @POST
    @Path("/getcode")
    @Produces(MediaType.TEXT_PLAIN)
    public Response getCodes(@Context ServletContext context){

        String in=context.getRealPath("/WEB-INF/reports.jrxml");
        File file=new File(in);

        ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition",
            "attachment; filename=\"file_from_server.log\"");
        return response.build();

    }
}

私のAJAX呼び出しは次のとおりです。

 $('a#link').click(function(event){
    event.preventDefault();
    $.ajax({
        url: '/reports/rest/examples/getcode',
        type: 'POST'
    });
}); 

ファイルはAJAXなしで正常にダウンロードされます。AJAXではファイルをダウンロードしません。アドバイスをお願いします。

4

3 に答える 3

18

アドバイスは簡単です。AJAXを介してファイルをダウンロードすることはできません。これはセキュリティポリシーです。つまり、データをダウンロードすることはできますが、JavaScript側からディスクに保存することはできません。

クリックでファイルをダウンロードしたい場合は、タグを追加hrefするだけです。aまたは、ファイルの。で新しいウィンドウを開きますURL

于 2012-10-18T13:02:47.110 に答える
1

A) データを受信するためのコールバックがない
b) コードにエラー コールバックを追加して、呼び出し後に受信エラーがあるかどうかを確認できるようにします。

    $.ajax({
    url: '/spaconsole/rest/examples/getcode',
    type: 'POST'
    success: function (data) {
        console.log('ok');
    },
    error: function (xhr) {
      console.log(xhr);
    }
    });

編集: これは、テキストをページに表示する場合です。ファイルをダウンロードしたい場合、これは方法ではありません。ajax は使用できません。

于 2012-10-18T13:04:04.607 に答える
1

AJAX から直接これを行うことはできませんが、ダウンロードを開始する iframe を使用することで回避できます。議論については、 Ajax ファイルのダウンロードの問題を参照してください。

于 2012-10-18T13:05:31.470 に答える