canjs / can-ajax

jQuery-inspired AJAX request library.
https://canjs.com/doc/can-ajax.html
MIT License
5 stars 7 forks source link

`can-ajax` does not handle `blob` response types #66

Open mikemitchel opened 5 years ago

mikemitchel commented 5 years ago

I have a use case where I expect the response to be a binary blob file (actual response Content-Type: application/pdf), and am able to make it work with this code (where showFile handles processing and downloading the returned blob/file):

    canAjax({
      url: assembleUrl,
      data: assembleData,
      type: 'post',
      contentType: 'application/x-www-form-urlencoded',
      dataType: null,
      xhrFields: {
        responseType: 'blob' // pdf file
      }
    }).then((xhrObj) => {
      // blob file is on xhr.response
      showFile(xhrObj.response)
    })

This works despite xhrObj.responseText showing:

responseText: [Exception: DOMException: Failed to read the 'responseText' property from 'XMLHttpRequest':
 The value is only accessible if the object's 'responseType' is '' or 'text' (was 'blob').

This code/switch statement should be updated to handle binary file response types, probably just returning xhr.response instead of the whole object: https://github.com/canjs/can-ajax/blob/c4e4c2691dc9a5255614118d346d1cb5fa078afb/can-ajax.js#L112-L114

mikemitchel commented 5 years ago

@phillipskevin please review to add anything I might have missed