2010-03-26 18 views
7

Đối với tùy chọn dataType vào hàm JQuery.AJAX, tôi không thấy mảng byte hoặc blob là một trong các khả năng.JQuery.AJAX - máy chủ của tôi có thể trả về một khối dữ liệu không?

Làm cách nào để lấy máy chủ để máy chủ của tôi có thể trả về mảng byte do kết quả của cuộc gọi AJAX?

Tôi có thể chuyển đổi blob thành văn bản, nhưng tôi sẽ cho nhỏ gọn.

CHỈNH SỬA: Các đốm màu sẽ không được hiển thị cho người dùng. Javascript của tôi sẽ nhìn vào nó và tạo ra một đối tượng ra khỏi nó. Đó là về một đốm màu 50kb, và tốc độ là quan trọng, vì vậy tôi không muốn thêm bất kỳ sưng lên nếu tôi không phải.

EDIT: Dữ liệu của tôi là một mảng các số nguyên. Base64 mã hóa là một khả năng, nhưng tôi không muốn thêm sưng lên. Nếu không có cách nào để làm điều này, tôi đoán tôi sẽ chỉ Base64 mã hóa nó mặc dù.

+0

Có thể bạn sẽ cần sử dụng PHP hoặc ASP để 'mặt nạ' dữ liệu nhị phân của bạn thành một tệp văn bản thông thường mà sau đó mã javascript của bạn sẽ giải mã. – thecoshman

+1

Bạn có chắc chắn muốn thực hiện việc này không? Không phải là nó tốt hơn để sử dụng một id của blob (nếu nó là trong cơ sở dữ liệu) và sau đó phục vụ các tập tin cho người dùng của họ bấm vào nó, hoặc render các byte thông qua một số phương tiện khác khi id có sẵn? –

+0

@Shervin Tôi muốn thao tác các đốm màu và tạo ra một đối tượng ra khỏi nó khi nó được lấy ra. Nó sẽ không được hiển thị cho người dùng. – Kyle

Trả lời

3

EDIT: Dựa trên thảo luận nhận xét, tôi muốn sửa lại câu trả lời của mình. Nếu bạn đang đi qua một mảng các số nguyên, và có thể nhận được nó để định dạng đó trên phía máy chủ của bạn, từ đó bạn hoàn toàn nên biến nó thành JSON. JSON hỗ trợ truyền các số nguyên, jQuery dễ dàng hỗ trợ nhận JSON.

mẫu JSON cho một mảng ints:

{ 
"array": [0, 1, 2, 3, 4, 5] 
} 

mẫu Javascript/jQuery mã cho lấy mà JSON:

$.getJSON('/url/to/binary/data/returning/json', 
    function(data) { 
     // access the array this way: 
     var array = data.array; 
     var first = array[0]; 
     // so here you can do whatever your code needs with that array 
    } 
); 

Cũ Gợi ý

Trong khi tôi đồng ý với bình luận ở trên, tôi tin rằng nó sẽ có thể làm điều này. Có bộ mã hóa/bộ giải mã base64 jQuery plugin sẽ giúp chuyển dữ liệu của bạn. (Gây ra một chút bloat, đó là sự thật). Nếu bạn base64 mã hóa mảng của bạn, bạn sẽ có thể chuyển nó.

Nếu bạn chỉ muốn tải xuống dữ liệu nhị phân (không hiển thị dữ liệu), hãy đặt loại phản hồi MIME thành ứng dụng/octet-stream và đặt tên tệp đính kèm để xử lý trình duyệt phù hợp.

$.get('/url/to/binary/data', 
    function(data) { 
     // convert binary data to whatever format you would like to use here with 
     // an encoded string, have the browser download, call 
     // a helper function, etc. 
    } 
); 

Bạn có thể muốn xem xét nhìn vào các định dạng khác được thường xuyên hơn chuyển qua HTTP (hoặc sử dụng một giao thức vận chuyển nếu cần thiết), tuy nhiên, tùy thuộc vào những gì bạn đang cố gắng làm.

+0

Bạn có thể cho ví dụ về thiết lập loại MIME thành 'application.octet-stream' hay không. – thecoshman

+0

Vì vậy, nếu tôi đặt loại MIME thành ứng dụng/octet-stream, thì biến 'data' trong đoạn mã của bạn sẽ chứa nó? Biến 'data' có thuộc kiểu mảng byte không? – Kyle

+0

@thecoshman - Đã nhiều năm kể từ khi tôi sử dụng PHP, vì vậy tôi không chắc chắn chính xác cách thiết lập tiêu đề HTTP từ máy chủ bằng PHP. Có vẻ như tìm kiếm của Google cung cấp con trỏ đến hướng dẫn sử dụng PHP để giải thích. – justkt

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