2010-09-03 6 views
0

J'essaie de récupérer un document XML à partir d'une URL, puis l'analyser. Je suis capable de l'ouvrir très bien sur un navigateur, mais il ne semble pas fonctionner à travers mon javascript. Quelqu'un peut-il m'aider?javascript XMLHttpRequest requestXML est null

function downloadUrl(url, callback) {  
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
     request.onreadystatechange = function(){}; 
     callback(request, request.status); 
     } 
    }; 

    request.open('GET', "url", true);  
    request.send(null); 
} 
downloadUrl("http://jojo.theone.net/survey.xml", function(data) { 
    alert("Inside downloadURL"); // shows up    
    var xml = request.responseXML; 
    alert(xml); // Doesn't even show up. 
     alert(request.responseText); // Doesnt show up. 


}); 
+1

le script en cours d'exécution sur 'jojo.theone.net'? –

Répondre

0

Essayez d'utiliser la valeur data pas l'objet request. Il est également préférable d'utiliser un framework comme Mootools ou jQuery pour effectuer des requêtes AJAX - vous obtiendrez une interface plus compatible et plus prévisible.
Notez également que la requête échouera si l'URL que vous demandez possède un serveur, un port et un protocole différents de ceux du script en cours de demande.

+0

L'url a un port différent du script. Y at-il un moyen de contourner cela? – John

+0

Non - ceci serait considéré comme un trou de sécurité sérieux, donc aucun navigateur ne le fera. Vous devez créer un routeur côté serveur et régler une URL qui sera réécrite sur un port différent. – mbq

2

Vous utilisez data comme nom de paramètre dans votre méthode de rappel, mais en appelant la méthode de rappel callback(request, request.status). Le résultat est que l'objet de requête est maintenant dans la variable appelée "data", et le request.status n'est pas référencé du tout.

Essayez

downloadUrl("http://jojo.theone.net/survey.xml", function(request, status) { 
    alert("Inside downloadURL"); 
    var xml = request.responseXML; 
    alert(xml); 
    alert(request.responseText); 
});