2010-07-20 2 views
0

Je suis en train d'obtenir le code html d'un site web en utilisant ce code:Javascript HTTP GET html/text renvoyant null/vide?

function catchData(req) { 
    console.debug("i got a reply!"); 
    var returnXML = req.responseXML; 
    console.debug(returnXML); 
    if (!returnXML) 
    { 
    console.debug("html is bad"); 
    return; 
    } 
    if (speed != currentSpeed) 
    moveToNewSpeed(speed); 
    currentSpeed = speed; 
    var error = returnXML.getElementsByTagName('message')[0].firstChild; 
    if (error) { 
    document.getElementById('errorMessage').innerHTML = error.nodeValue; 
    document.getElementById('errorMessage').style.visibility = 'visible'; 
    } 
    else 
    document.getElementById('errorMessage').style.visibility = 'hidden'; 
    } 

function sendRequest(url,callback,postData) { 
    console.debug(url); 
    console.debug(postData); 
    var req = createXMLHTTPObject(); 
    if (!req) return; 
    var method = (postData) ? "POST" : "GET"; 
    console.debug(method); 
    req.open(method,url,true); 
    console.debug("request Opened"); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    if (postData) 
    { 
    req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
    console.debug("set post data"); 
    } 
    req.onreadystatechange = function() { 
    if (req.readyState != 4) 
    { 
    console.debug("bad ready state"); 
    return; 
    } 
    console.debug(req); 
    console.debug("responseText:"); 
    console.debug(req.responseText); 
    callback(req); 
    console.debug("callback finished"); 
    } 
    if (req.readyState == 4) return; 
    req.send(postData); 
    } 

var XMLHttpFactories = [ 
function() {return new XMLHttpRequest()}, 
function() {return new ActiveXObject("Msxml2.XMLHTTP")}, 
function() {return new ActiveXObject("Msxml3.XMLHTTP")}, 
function() {return new ActiveXObject("Microsoft.XMLHTTP")} 
]; 

function createXMLHTTPObject() { 
var xmlhttp = false; 
for (var i=0;i<XMLHttpFactories.length;i++) { 
    try { 
    xmlhttp = XMLHttpFactories[i](); 
    } 
    catch (e) { 
    continue; 
    } 
    break; 
} 
return xmlhttp; 
} 

Quand je fais une grab Wireshark je vois le serveur renvoyant le html, mais req.responseText est juste une chaîne vide. Quelqu'un sait quoi de neuf?

Répondre

0

d'où le javascript est-il exécuté? Avez-vous une violation de la politique de même origine?

Je demande parce que j'ai vu la fantaisie dans ces situations, où je violais la politique, mais la demande était encore en cours; juste la réponse était vide ... ça n'a aucun sens que le navigateur envoie la requête, mais ils la manipulent tous différemment il apparaît ...

0

Y at-il une raison pour laquelle vous écrivez vous-même ce code? au lieu d'utiliser une bibliothèque comme jQuery? Vous trouverez cela beaucoup plus facile et ils ont déjà compris toutes les bizarreries associées à l'interopérabilité du navigateur, etc.

1

Je suppose que vous essayez d'obtenir le code HTML d'une page qui est sur un domaine différent de votre JavaScript. C'est une requête interdomaine, qui n'est pas autorisée en Javascript. Ceci est généralement vu comme des réponses vides dans votre script.

La norme JSONP décrit un mécanisme permettant de récupérer JSON à partir d'un domaine différent, mais cela doit être implémenté sur l'autre site et ne fonctionne pas avec le code HTML. Le Yahoo! Query Language (YQL) peut agir comme un proxy. Le Yahoo! le serveur récupérera le code HTML et créera une réponse JSONP, que votre script recevra. Cela peut vous aider à atteindre votre objectif. Le YQL a beaucoup de fonctionnalités intéressantes pour récupérer le contenu d'autres sites, je vous recommande de lire la documentation pour voir s'il y a autre chose que vous pouvez utiliser.