2012-10-18 58 views
11

我對AJAX相當陌生。我正在使用AJAX向服務器發送請求。該服務返回一個文本文件。但是當數據返回時,不會出現下載框。 返回該文件中的其它服務如下:Ajax調用以下載從RESTful服務返回的文件

@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,它不會下載該文件。請諮詢。

+0

可能的重複[處理從ajax文件下載文件](http://stackoverflow.com/a/23797348/148271) – IsmailS

回答

17

建議很簡單:您無法通過AJAX下載文件 - 這是一項安全策略。我的意思是你可以下載數據,但你不能將它從JavaScript端保存到磁盤。

如果你想要點擊下載文件,那麼你可以添加href給你a標籤。或者用文件的URL打開一個新窗口。

+0

感謝您的答覆。經過一番研究,似乎至多我可以打開一個窗口來顯示內容,但我無法將其保存到磁盤。 –

1

A)你沒有回調接收返回的數據
B)錯誤回調添加到您的代碼,所以你可以看到,如果有通話後收到錯誤:

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

編輯:這是否要在頁面中顯示文本。如果你想下載文件,這不是方法,你不能使用ajax

+0

感謝您的回覆。我從服務器端獲取數據,但沒有提示將數據保存到磁盤。 –