2016-06-16 94 views
0

我碰到一個問題$ http調用responseType:blob。 我想在JSON中處理錯誤響應,但是即使將響應的內容類型設置爲「application/json」在服務器上,我也會獲得blob數據。

$http.post(url, data, {responseType: 'blob'}) 
    .then(function(response) { 
    // download the file (works fine) 
    }) 
    .catch(function(error) { 
    // handle JSON response error 
    }); 

有沒有辦法做到這一點,但不嘗試convert error data反對?

+0

。那麼()函數可以以更有效的方式...。然後(功能(響應){}功能(錯誤使用){的console.log(誤差);});在console.log()中,你會以你想要的方式得到它。然後你可以處理它。 –

+0

謝謝,但我的項目約定是使用then()。catch()而不是then(onSuccess,onError)。不幸的是,它並沒有改變onError回調中的數據仍然是blob類型的事實。 –

+0

你可以嘗試$ http({method:'GET',url:Restangular.one('attachments',idAtt).getRestangularUrl(), header:{'X-Auth-Token':token},responseType:'blob '})。then(function(response){url =(window.URL || window.webkitURL).createObjectURL(response.data); window.open(url); }); –

回答

1

對於成功和錯誤情況,您不能擁有不同的內容類型,但您可以在單個位置管理轉換。寫responseErrorinterceptor在那裏你可以檢查是否error.datainstanceof Blob並將其轉換成JSON

+1

嗨Aleskey,我已經用'FileReader'的'interceptor'和'readAsText'方法修復了它,但我想知道是否有更好的方法來做到這一點。 –