在前端開(kāi)發(fā)中,我們常常需要通過(guò)Ajax技術(shù)來(lái)獲取服務(wù)器返回的數(shù)據(jù)。然而,有時(shí)候我們會(huì)遇到一些二進(jìn)制碼在數(shù)據(jù)中的情況,這給數(shù)據(jù)的處理和展示帶來(lái)了一定的困擾。本文將介紹如何使用Ajax去掉二進(jìn)制碼,讓數(shù)據(jù)得到正確的展示和處理。
在開(kāi)始具體討論之前,我們先來(lái)看一個(gè)例子。假設(shè)我們需要通過(guò)Ajax從服務(wù)器獲取一張圖片的數(shù)據(jù),然后將其展示在網(wǎng)頁(yè)上。我們可以使用jQuery的ajax方法來(lái)發(fā)送請(qǐng)求和接收響應(yīng):
$.ajax({ url: 'image.jpg', method: 'GET', dataType: 'binary', success: function(response) { // 在網(wǎng)頁(yè)上展示圖片 $('#image').attr('src', 'data:image/jpeg;base64,' + btoa(response)); } });
在這個(gè)例子中,我們指定了響應(yīng)的數(shù)據(jù)類型為binary。當(dāng)服務(wù)器返回響應(yīng)時(shí),response參數(shù)就是一個(gè)包含了二進(jìn)制碼的字符串。為了讓瀏覽器能夠正確識(shí)別并展示圖片,我們需要將二進(jìn)制碼轉(zhuǎn)換為Base64編碼格式,并將其作為圖片的src屬性值。
那么,如何去掉這些二進(jìn)制碼呢?有幾種常見(jiàn)的方法可以實(shí)現(xiàn)這一目的。
第一種方法是使用Blob對(duì)象。Blob是一種二進(jìn)制數(shù)據(jù)類型,它能夠以數(shù)組形式存儲(chǔ)大量的二進(jìn)制數(shù)據(jù)。我們可以通過(guò)創(chuàng)建Blob對(duì)象,將二進(jìn)制碼轉(zhuǎn)換成Blob,然后再通過(guò)URL.createObjectURL方法生成一個(gè)臨時(shí)鏈接來(lái)展示圖片:
$.ajax({ url: 'image.jpg', method: 'GET', responseType: 'arraybuffer', processData: false, success: function(response) { // 創(chuàng)建Blob對(duì)象 var blob = new Blob([response], {type: 'image/jpeg'}); // 生成臨時(shí)鏈接 var url = URL.createObjectURL(blob); // 在網(wǎng)頁(yè)上展示圖片 $('#image').attr('src', url); } });
在這個(gè)例子中,我們將響應(yīng)的dataType設(shè)置為arraybuffer,以便讓服務(wù)器返回二進(jìn)制數(shù)據(jù)。同時(shí),我們還需要設(shè)置processData為false,告訴jQuery不要將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串。接著,我們創(chuàng)建了一個(gè)Blob對(duì)象,并指定其類型為'image/jpeg'。最后,通過(guò)URL.createObjectURL方法生成一個(gè)臨時(shí)鏈接,并將其作為圖片的src屬性值。
第二種方法是使用FileReader對(duì)象。FileReader是一種用于讀取文件的對(duì)象,我們可以通過(guò)它來(lái)將二進(jìn)制碼轉(zhuǎn)換為可讀的數(shù)據(jù)。我們可以先創(chuàng)建一個(gè)FileReader對(duì)象,然后調(diào)用它的readAsDataURL方法來(lái)讀取二進(jìn)制碼,并將其轉(zhuǎn)換為Base64編碼格式:
$.ajax({ url: 'image.jpg', method: 'GET', responseType: 'arraybuffer', processData: false, success: function(response) { // 創(chuàng)建FileReader對(duì)象 var reader = new FileReader(); // 讀取二進(jìn)制碼 reader.onloadend = function() { // 在網(wǎng)頁(yè)上展示圖片 $('#image').attr('src', reader.result); }; reader.readAsDataURL(new Blob([response], {type: 'image/jpeg'})); } });
在這個(gè)例子中,我們先創(chuàng)建了一個(gè)FileReader對(duì)象,并定義了它的onloadend事件處理函數(shù)。在這個(gè)函數(shù)中,我們將reader.result作為圖片的src屬性值,以便在網(wǎng)頁(yè)上展示圖片。最后,通過(guò)調(diào)用reader.readAsDataURL方法,我們將二進(jìn)制碼轉(zhuǎn)換為Base64編碼格式,并傳入一個(gè)包含二進(jìn)制碼的Blob對(duì)象。
通過(guò)以上兩種方法,我們可以很好地去掉二進(jìn)制碼,使數(shù)據(jù)能夠正確地展示和處理。當(dāng)然,具體的實(shí)現(xiàn)方式還取決于具體的需求和情況,我們可以根據(jù)自己的實(shí)際情況選擇最合適的方法來(lái)處理二進(jìn)制數(shù)據(jù)。