2015-06-29 14 views
6

Chúng tôi có một API REST phát ra JSON từ nơi chúng tôi có thể cung cấp dữ liệu nguồn (sử dụng AJAX). Những gì chúng tôi muốn làm là để có thể thực hiện các cuộc gọi AJAX trong đó mỗi cuộc gọi tìm nạp một đoạn dữ liệu nhỏ (nói 5000 hàng hoặc hơn), và sau đó ghi nó ra tệp CSV trên trình duyệt dưới dạng tải xuống. Có vẻ như nếu chúng ta có tất cả dữ liệu trong bộ nhớ JS, thì ghi nó ra tệp CSV không khó, nhưng nếu chúng ta muốn ghi 100K bản ghi, thì chúng ta buộc phải lấy 100K trong một lần và sau đó tạo tệp trong một lần.Làm thế nào để dòng AJAX đầu ra cho một tập tin tải về trong Javascript?

Thay vào đó, chúng tôi cảm thấy sẽ nhẹ nhàng hơn trên cả máy chủ và ứng dụng khách để tải xuống các đoạn nhỏ và truyền tải tệp đó xuống tệp tải xuống. Có cách nào để làm điều đó?

(Chúng tôi hiện nay sử dụng jQuery 2.0.0, nhưng không nhớ sử dụng một thư viện khác nhau để thực hiện điều này)

+0

tại sao không sử dụng iframe ẩn để tải xuống luồng dưới dạng tệp? http://stackoverflow.com/questions/16799483/using-jquery-and-iframe-to-download-a-file – Henrik

+0

@Henrik Hoạt động, SAU tất cả tôi có tất cả nội dung trong bộ nhớ JS. Tôi muốn thực hiện các chu kỳ tìm nạp-> writeout-to-file-> fetch. – Shreeni

+0

? nó không bao giờ nhập vào bộ nhớ JS .. JS chỉ đơn giản khởi tạo việc tải xuống, bằng cách trỏ khung nội tuyến tới nguồn. Trình duyệt sẽ xử lý việc tải xuống và máy chủ sẽ xử lý tập tin đó thành các gói mạng - hoặc tôi đã hiểu sai câu hỏi chưa? http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery – Henrik

Trả lời

1

Về cơ bản bạn đang tìm kiếm phân trang hồ sơ ... cho điều này bạn có thể làm

  1. Tìm tổng số bản ghi trong cơ sở dữ liệu
  2. Thân chia hồ sơ của bạn/số lượng cuộc gọi
  3. Merge tất cả các dữ liệu đến từ các cuộc gọi khác nhau

để làm nhiều cuộc gọi sử dụng jquery bạn có thể làm như thế này

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2) { 
    // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively. 
    // Each argument is an array with the following structure: [ data, statusText, jqXHR ] 
    var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It" 
    if (/Whip It/.test(data)) { 
    alert("We got what we came for!"); 
    } 
}); 

trong mã có nhiều cuộc gọi ajax và cuối cùng nó sáp nhập dữ liệu ... rằng điều tương tự trên phía máy chủ, bạn phải làm gì nếu bạn là sử dụng C# so với TPL (Thư viện nhiệm vụ parellel) là lựa chọn tốt ... cho mỗi cuộc gọi bạn cần gọi với số trang

+0

Điều này vẫn cần tôi lưu trữ hiệu quả tất cả nội dung trong bộ nhớ JS, đó là điều tôi muốn tránh ngay từ đầu. – Shreeni

+0

Tôi muốn thực hiện các chu kỳ tìm nạp-> writeout-to-file-> fetch .. – Shreeni

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