2016-08-18 91 views
1

我在jquery中搜索一些東西時遇到了blob。谷歌搜索,但不能確切地弄清楚它是什麼樣的概念。什麼是在jquery中使用的Blob

我發現這個代碼通過ajax下載PDF文件。

$.ajax({ 
    method: 'GET', 
    dataType: 'blob', 
    data: { report_type: report_type, start_date: start_date, end_date: end_date, date_type: date_type }, 
    url: '/reports/generate_pdf.pdf', 
     success: function(data) { 
      var blob=new Blob([data]); 
      var link=document.createElement('a'); 
      link.href=window.URL.createObjectURL(blob); 

      link.download="Report_"+new Date()+".pdf"; 
      link.click(); 
      console.log("pdf printed"); 
     } 
}); 

此代碼工作正常,但打印空白pdf時沒有內容,無論是靜態還是動態。但有一個奇怪的行爲,即如果計算的動態數據太大,它會生成多個頁面。

我只想弄清blob的概念,這樣我就能弄清楚自己這段代碼在做什麼以及blob是如何工作的。

任何適當的指導或幫助將非常感激。

在此先感謝!

+1

這意味着你期望從服務器返回二進制數據。 – PHPglue

+1

'jQuery.ajax()'默認不返回'Blob'響應。 – guest271314

+0

那我該怎麼做。正常的HTML也是表現相同的方式 – techdreams

回答

0

參見5. The Blob Interface and Binary Data

Blob對象指的是字節序列,並且具有size屬性 這是在字節序列中的字節總數,和一個type 屬性,它是一個ASCII-以小寫字母編碼的字符串表示字節序列的媒體類型 。


jQuery.ajax()沒有一個選項,缺省設置dataTypeBlob,看到Add support for HTML5 XHR v2 with responseType set to 'arraybuffer' on $.ajax

您可以使用XMLHttpRequest(),或者fetch()設置responseBlobArrayBuffer

var request = new XMLHttpRequest(); 
request.open("GET", "/path/to/resource"); 
request.responseType = "blob"; 
request.onload = function() { 
    // do stuff `this.response`:`Blob` 
    console.log(this.response) 
} 
request.send(); 

fetch("/path/to/resource") 
.then(function(response) { 
    return response.blob() 
}) 
.then(function(blob) { 
    // do stuff with response 
    console.log(blob) 
}); 
1

這在另一篇文章中引用,以及 - 見this Stack Overflow post

甲BLOB代表一個 inary 大號 ARGE OB JECT。把它想象成存儲在SQL數據庫中的二進制數據的集合。

BLOB可以存儲像圖像,視頻和音頻等多媒體內容,但它確實可以存儲任何類型的二進制數據。由於BLOB的默認長度不是標準的,因此您可以根據需要定義每個BLOB的存儲容量,長度不超過2,147,483,647個字符 - 請參閱MariaDB文檔中的here示例。

由於jQuery沒有辦法處理blob,你可以嘗試使用本地Blob接口。從MDN's documentation

var oReq = new XMLHttpRequest(); 
oReq.open("GET", "/myfile.png", true); 
oReq.responseType = "arraybuffer"; 

oReq.onload = function(oEvent) { 
    var blob = new Blob([oReq.response], {type: "image/png"}); 
    // ... 
}; 

oReq.send(); 
相關問題