2012-10-18 35 views
11

Tôi khá mới đối với AJAX. Tôi đang gửi yêu cầu đến máy chủ bằng AJAX. Dịch vụ trả về một tệp văn bản. Nhưng không có hộp tải xuống xuất hiện khi dữ liệu được trả về. Các dịch vụ còn lại mà trả về tập tin là như sau:Cuộc gọi Ajax để tải xuống tệp được trả về từ dịch vụ 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(); 

    } 
} 

gọi AJAX của tôi là như sau:

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

Các tập tin tải thành công mà không cần AJAX. Với AJAX, nó không tải xuống tệp.Xin tư vấn.

+0

bản sao có thể có của [Xử lý tệp tải xuống từ bài đăng ajax] (http://stackoverflow.com/a/23797348/148271) – IsmailS

Trả lời

17

Tư vấn rất đơn giản: bạn không thể tải xuống tệp qua AJAX - đó là chính sách bảo mật. Tôi có nghĩa là bạn có thể tải xuống dữ liệu, nhưng bạn không thể lưu nó vào đĩa từ phía JavaScript.

Nếu bạn muốn tải xuống tệp khi nhấp, bạn có thể chỉ cần thêm href vào thẻ a. Hoặc mở một cửa sổ mới với tập tin URL.

+0

Cảm ơn bạn đã trả lời. Sau khi một số nghiên cứu có vẻ như rằng nhiều nhất tôi có thể mở một cửa sổ để hiển thị các nội dung nhưng tôi không thể lưu nó vào đĩa. –

1

A) bạn không có một callback để nhận dữ liệu trở lại
b) Thêm callback lỗi để bạn mã để bạn có thể xem có nhận lỗi sau khi cuộc gọi:

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

Chỉnh sửa: Đây là nếu bạn muốn hiển thị văn bản trong trang. Nếu bạn muốn tải xuống tệp, bạn không thể sử dụng ajax

+0

Cảm ơn bạn đã trả lời. Tôi đang nhận dữ liệu từ đầu máy chủ nhưng không có lời nhắc lưu dữ liệu trên đĩa. –

1

Bạn không thể thực hiện điều đó trực tiếp từ AJAX, nhưng bạn có thể thực hiện việc đó bằng cách có khung nội tuyến bắt đầu tải xuống. Xem Ajax File download Issue để thảo luận.

Các vấn đề liên quan