2010-03-26 63 views
7

對於JQuery.AJAX函數的dataType選項,我沒有看到字節數組或blob作爲其中一種可能性。JQuery.AJAX - 我的服務器可以返回一個數據blob嗎?

我怎樣才能得到它,所以我的服務器可以返回一個字節數組作爲AJAX調用的結果?

我可以將blob轉換爲文本,但我要求緊湊。

編輯:blob不會顯示給用戶。我的JavaScript會查看它並從中創建一個對象。這是一個50kb的blob,速度很重要,所以如果我不需要,我不想增加任何膨脹。編輯:我的數據是整數數組。 Base64編碼是可能的,但我不想增加膨脹。如果沒有辦法做到這一點,我想我只是Base64編碼它。

+0

您可能需要使用PHP或ASP將您的二進制數據「掩蓋」到正常的文本文件中,然後您的JavaScript才能解碼。 – thecoshman 2010-03-26 13:08:00

+1

您確定要這麼做嗎?如果使用blob的id(如果它在數據庫中),然後將文件提供給用戶點擊它,或者在id可用時通過其他方式呈現字節,是不是更好? – 2010-03-26 13:12:04

+0

@Shervin我想​​操縱blob,並在其檢索後創建一個對象。它不會顯示給用戶。 – Kyle 2010-03-26 13:43:02

回答

3

編輯:基於評論討論,我想修改我的答案。如果你傳遞一個整數數組,並且可以在你的服務器端得到它的格式,那麼你應該絕對把它變成JSON。 JSON支持傳遞整數,jQuery很容易支持獲取JSON。

樣品JSON的整數數組:

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

樣品的Javascript/jQuery代碼用於檢索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 
    } 
); 

老建議

雖然我與評論者同意上面,我相信應該可以做到這一點。有一個base64編碼器/解碼器jQuery plugin應該有助於傳輸數據。 (導致一點bloat,這是真的)。如果你base64編碼你的數組,你應該能夠傳輸它。

如果您只想下載二進制數據(不顯示它),請將您的響應的MIME類型設置爲application/octet-stream,併爲適當的瀏覽器處理提供附件名稱。

$.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. 
    } 
); 

你可能要考慮望着那更經常通過HTTP(或使用其他傳輸協議,如果必要的話)轉移等格式,不過,這取決於你正在嘗試做的。

+0

您可以舉一個將MIME類型設置爲'application.octet-stream'的例子。 – thecoshman 2010-03-26 13:28:13

+0

因此,如果我將MIME類型設置爲application/octet-stream,那麼代碼片段中的'data'變量將包含它? 'data'變量是字節數組的類型嗎? – Kyle 2010-03-26 13:39:03

+0

@thecoshman - 我使用PHP已經有好幾年了,所以我不確定如何從PHP中的服務器設置HTTP標頭。看起來像谷歌搜索提供了PHP手冊的指針來解釋。 – justkt 2010-03-26 13:53:40

相關問題