2009-11-23 7 views
1

J'essaie de travailler avec xml et javascript. Dans Firefox, il fonctionne très bien en utilisant XMLHttpRequest mais dans IE (6-8) Je reçois l'erreur:XML ActiveXObject IE. Objet ne supporte pas cette action

Object doesn't support this action 

J'utilise la fonction suivante:

function createRequestObject(){ 
    var request; 
    try { 
     request = new XMLHttpRequest(); 
    } catch (trymicrosoft) { 
     try { 
       request = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (othermicrosoft) { 
       try { 
         request = new ActiveXObject("Microsoft.XMLHTTP"); 
       } catch (failed) { 
         request = false; 
       } 
     } 
    } 
    return request; 
} 

Et puis appeler avec:

var xhttp = createRequestObject(); 
    xhttp.open("GET","myfile.xml",false); 
... 

Des pensées?

+0

qui est la ligne de lancer l'erreur? –

Répondre

2

Essayez de spécifier une variable locale pour la demande, var request (bien que cela ne semble pas devoir être résolu).

J'utiliser cette note de bas pour XHR léger:

/** XHConn - Simple XMLHTTP Interface - [email protected] - 2005-04-08  ** 
** Code licensed under Creative Commons Attribution-ShareAlike License  ** 
** http://creativecommons.org/licenses/by-sa/2.0/       **/ 
function XHConn() 
{ 
    var xmlhttp, bComplete = false; 
    try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } 
    catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
    catch (e) { try { xmlhttp = new XMLHttpRequest(); } 
    catch (e) { xmlhttp = false; }}} 
    if (!xmlhttp) return null; 
    this.connect = function(sURL, sMethod, sVars, fnDone) 
    { 
    if (!xmlhttp) return false; 
    bComplete = false; 
    sMethod = sMethod.toUpperCase(); 

    try { 
     if (sMethod == "GET") 
     { 
     xmlhttp.open(sMethod, sURL+"?"+sVars, true); 
     sVars = ""; 
     } 
     else 
     { 
     xmlhttp.open(sMethod, sURL, true); 
     xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1"); 
     xmlhttp.setRequestHeader("Content-Type", 
      "application/x-www-form-urlencoded"); 
     } 
     xmlhttp.onreadystatechange = function(){ 
     if (xmlhttp.readyState == 4 && !bComplete) 
     { 
      bComplete = true; 
      fnDone(xmlhttp); 
     }}; 
     xmlhttp.send(sVars); 
    } 
    catch(z) { return false; } 
    return true; 
    }; 
    return this; 
} 

Utilisation:

var myConn = new XHConn(); 

if (!myConn) alert("XMLHTTP not available. Try a newer/better browser."); 

var fnWhenDone = function (oXML) { alert(oXML.responseText); }; 

myConn.connect("mypage.php", "POST", "foo=bar&baz=qux", fnWhenDone); 
+0

Je voudrais changer l'ordre de try catch pour essayer 'new XMLHttpRequest()' d'abord. IE7 + prend en charge nativement l'objet XMLHttp sans avoir recours à ActiveX. –

+0

Cela semble produire les données correctement, et je l'ai branché avec le reste de mon code très bien. Je reçois la même erreur maintenant mais quand je tente de parcourir un tableau d'éléments: var deals = xmlDoc.getElementsByTagName ("deal"); pour (var i dans les offres) {... Est-ce que IE ne voit pas cela comme un tableau? – kilrizzy

+0

Pas ma fonction, je le ferais personnellement mais j'étais trop paresseux pour le mettre à jour. –

0

Je pense que vous avez besoin de mettre un var devant la demande:

function createRequestObject(){ 
    var request; 
    try { 
     request = new XMLHttpRequest(); 
    } catch (trymicrosoft) { 
     try { 
       request = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (othermicrosoft) { 
       try { 
         request = new ActiveXObject("Microsoft.XMLHTTP"); 
       } catch (failed) { 
         request = false; 
       } 
     } 
    } 
    return request; 
} 

IE a souvent des problèmes avec les variables globales.

+0

hmm toujours pas de chance – kilrizzy