Search code examples
javascriptxmlxmldom

Read XML file using JavaScript in Chrome


I need to load and read an XML file using JavaScript.

The following code works fine in Firefox, IE and Opera:

function loadXMLDoc(dname) {
  var xmlDoc

  // Internet Explorer
  try {
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM')
  }
  catch (e) {
    // Firefox, Opera, etc.
    try {
      xmlDoc = document.implementation.createDocument('', '', null)
    }
    catch (e) {
      alert(e.message)
    }
  }

  try {
    xmlDoc.async = false
    xmlDoc.load(dname)
    return xmlDoc
  }
  catch (e) {
    alert(e.message)
  }

  return null
}

But executing this code in Chrome gives me this error:

Object# has no method "load"


Solution

  • Legacy Code

    document.implementation.createDocument does not work on Chrome and Safari.

    Use XMLHttpRequest instead when possible:

    function loadXMLSync(url) {
      try {
        // Prefer XMLHttpRequest when available
        var xhr = new XMLHttpRequest()
        xhr.open('GET', url, false)
        xhr.setRequestHeader('Content-Type', 'text/xml')
        xhr.send()
    
        return xhr.responseXML
      }
      catch (e) {
        // XMLHttpRequest not available, fallback on ActiveXObject
        try {
          var activex = new ActiveXObject('Microsoft.XMLDOM')
          activex.async = false
          activex.load(url)
    
          return activex
        }
        catch (e) {
          // Neither XMLHttpRequest or ActiveXObject are available
          return undefined
        }
      }
    }
    

    Modern Browsers

    If you're targeting modern browsers (> IE6), just use XMLHttpRequest:

    function loadXMLSync(url) {
      var xhr = new XMLHttpRequest()
    
      xhr.open('GET', url, false)
      xhr.setRequestHeader('Content-Type', 'text/xml')
      xhr.send()
    
      return xhr.responseXML
    }