2012-05-17 11 views
28

Quiero escribir una función de Javascript que devuelva contenido HTML como cadena de URL dada a la función. Encontré una respuesta similar en Stackoverflow.Devuelve contenido HTML como una cadena, URL dada. Función Javascript

Estoy tratando de usar this answer para resolver mi problema.

Sin embargo, parece que document.write() no está escribiendo nada. Cuando cargo la página, aparece una pantalla en blanco.

<html> 
<head> 
</head> 
<body> 
    <script type="text/JavaScript"> 
    function httpGet(theUrl) 
    { 
    var xmlHttp = null; 

    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", theUrl, false); 
    xmlHttp.send(null); 
    return xmlHttp.responseText; 
    } 
    document.write(httpGet("https://stackoverflow.com/")); 
    </script> 
</body> 
</html> 
+5

Uso .innerHT ML, no document.write. –

+1

¿Te refieres a 'httpGet (" http://stackoverflow.com/ ") .innerHTML;'? Esto cargó una página en blanco también. –

+1

Las respuestas a continuación describen lo que necesita. –

Respuesta

27

necesita devolver cuando el == readystate 4, por ejemplo,

function httpGet(theUrl) 
{ 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      return xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET", theUrl, false); 
    xmlhttp.send();  
} 
+0

Estoy usando Chrome, y el error de la consola dice 'Unbeught ReferenceError: xmlHttp no está definido' –

+7

¿Esto no provocará una violación de la misma política de origen? : http: //en.wikipedia.org/wiki/Same_origin_policy –

+0

@SoboLAN Sí lo hace. (Al menos para mí) – Lerkes

8

después de recibir la respuesta acaba de hacer llamar a esta función para añadir datos a su elemento del cuerpo

function createDiv(responsetext) 
{ 
    var _body = document.getElementsByTagName('body')[0]; 
    var _div = document.createElement('div'); 
    _div.innerHTML = responsetext; 
    _body.appendChild(_div); 
} 

código @satya modificado de la siguiente manera

function httpGet(theUrl) 
{ 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      createDiv(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open("GET", theUrl, false); 
    xmlhttp.send();  
} 
17

El único que he encontrado para Cross-site, es esta función:

<script type="text/javascript"> 
var your_url = 'http://www.example.com'; 

</script> 

<script type="text/javascript" src="jquery.min.js" ></script> 
<script type="text/javascript"> 
// jquery.xdomainajax.js ------ from padolsey 

jQuery.ajax = (function(_ajax){ 

    var protocol = location.protocol, 
     hostname = location.hostname, 
     exRegex = RegExp(protocol + '//' + hostname), 
     YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', 
     query = 'select * from html where url="{URL}" and xpath="*"'; 

    function isExternal(url) { 
     return !exRegex.test(url) && /:\/\//.test(url); 
    } 

    return function(o) { 

     var url = o.url; 

     if (/get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url)) { 

      // Manipulate options so that JSONP-x request is made to YQL 

      o.url = YQL; 
      o.dataType = 'json'; 

      o.data = { 
       q: query.replace(
        '{URL}', 
        url + (o.data ? 
         (/\?/.test(url) ? '&' : '?') + jQuery.param(o.data) 
        : '') 
       ), 
       format: 'xml' 
      }; 

      // Since it's a JSONP request 
      // complete === success 
      if (!o.success && o.complete) { 
       o.success = o.complete; 
       delete o.complete; 
      } 

      o.success = (function(_success){ 
       return function(data) { 

        if (_success) { 
         // Fake XHR callback. 
         _success.call(this, { 
          responseText: data.results[0] 
           // YQL screws with <script>s 
           // Get rid of them 
           .replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, '') 
         }, 'success'); 
        } 

       }; 
      })(o.success); 

     } 

     return _ajax.apply(this, arguments); 

    }; 

})(jQuery.ajax); 



$.ajax({ 
    url: your_url, 
    type: 'GET', 
    success: function(res) { 
     var text = res.responseText; 
     // then you can manipulate your text as you wish 
     alert(text); 
    } 
}); 

</script> 
+2

Siempre obtengo resultados de datos de texto de respuesta como 0 y lanza una excepción. – Kurkula

Cuestiones relacionadas