fetch, according to the specs, will throw a TypeError if the URL to be fetched contains credentials ("Request cannot be constructed from a URL that includes credentials").
This may sound reasonable (for security) and neglectable, because an additional "Authorization" header could be used if needed.
However, there's a problem if fetch inside a page shall load data relative to the base url of the page and if that page's URL has credentials itself. The browser will construct an URL for fetch('data.json') that contains credentials taken from the page and throw an error.
To me this appears like a browser bug - it's building the URL and could simply leave out credentials (what it does every other time anyway replacing it magically by "Authorisation" header). However, as it happens on both Chrome and Firefox, this may be intentional (although, IMO, the specs may leave room for another interpretation as well).
XMLHttpRequest, on the other hand, would load the requested resource happily even with credentials (see network tab in developer tools).
Hence, under certain circumstances, the behaviour of the page will change or even lead to an error - which we had to learn the hard way. We ended up building an absolute URL by using windows.location data.
fetch(url).then(function(data) (...));is not simpler than usingXMLHttpRequestto do the same thing? It may have lots of other features, but geez, it sure is simpler to use for common things. It IS a cleaned up API.