2009-07-20 42 views
21

Ni:jquery ajax get responseText de URL http

var response = $.ajax({ 
    type: "GET", 
    url: "http://www.google.de", 
    async: false, 
    success : function() { 
     alert (this); 
    } 
}); 

Nor:

var response2 = $.get("http://www.google.de", function(data) { 
    alert("Data Loaded: " + data); 
}); 

dame un objeto. ¿Cómo obtengo acceso al responseText?

Respuesta

3

en funciones ajax jquery, la firma éxito de devolución de llamada es:

function (data, textStatus) { 
    // data could be xmlDoc, jsonObj, html, text, etc... 
    this; // the options for this ajax request 
} 

dependiendo del tipo de datos con lo solicitado, utilizando el parámetro 'tipo de datos', que obtendrá el argumento '' de datos.

de los documentos:

tipo de datos (cadena) por defecto: suposición inteligente (XML o HTML). El tipo de datos que espera del servidor. Si no se especifica ninguno, jQuery transferirá de manera inteligente ya sea responseXML o responseText a su devolución de llamada correcta, según el tipo de respuesta MIME.

Los tipos disponibles (y el resultado se pasa como primer argumento a su devolución de llamada de éxito) son:

"xml": Devuelve un documento XML que puede ser procesada a través de jQuery.

"html": devuelve HTML como texto sin formato; las etiquetas de script incluidas se evalúan cuando se insertan en el DOM.

"script": Evalúa la respuesta como JavaScript y la devuelve como texto sin formato. Inhabilita el almacenamiento en caché a menos que se use la opción "caché". Nota: Esto convertirá las POST en GET para solicitudes de dominio remoto.

"json": Evalúa la respuesta como JSON y devuelve un objeto de JavaScript.

"jsonp": Se carga en un bloque JSON utilizando JSONP. Se agregará un extra "? Callback =?" hasta el final de su URL para especificar la devolución de llamada. (Agregado en jQuery 1.2)

"texto": Una cadena de texto sin formato.

ver http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

ver primero otro comentario - respuesta está vacía -> no hay texto googleHtml ?! como respuesta: -/ –

30

Usted simplemente tiene que volver a escribir de esa manera:

var response = ''; 
$.ajax({ type: "GET", 
     url: "http://www.google.de", 
     async: false, 
     success : function(text) 
     { 
      response = text; 
     } 
}); 

alert(response); 
+0

mmh lo intenté en ie8 y ff.5.5.1 - en caso de que no funcione ?! –

+0

está vacío -> sin respuesta - pero ¿por qué? –

+3

@all - el dominio cruzado ajax no funciona a menos que el dominio tenga habilitado jsonp - que google no lo hace – karim79

20

Como dijo Karim, el dominio cruzado ajax no funciona a menos que el servidor lo permita. En este caso, Google no lo hace, PERO, hay un truco simple para evitar esto en muchos casos. Simplemente haga que su servidor local pase el contenido recuperado a través de HTTP o HTTPS.

Por ejemplo, si estuviera usando PHP, usted podría:

Cree el archivo WEB_ROOT/ajax_responders/google.php con:

<?php 
    echo file_get_contents('http://www.google.de'); 
?> 

Y entonces modificar su código para conectarse a ese lugar de al dominio de Google directamente en la javascript:

var response = $.ajax({ type: "GET", 
         url: "/ajax_responders/google.php", 
         async: false 
         }).responseText; 
alert(response); 
2

primer lugar hay que descargar un plugin de jQuery para permitir solicitudes entre dominios. Descárgalo aquí: https://github.com/padolsey/jQuery-Plugins/downloads

Importe el archivo llamado query.xdomainsajax.js en su proyecto e incluirlo con este código:

<script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script> 

Para obtener el código HTML de una página web externa en el texto se puede formar escribir esto:

$.ajax({ 
    url: "http://www.website.com", 
    type: 'GET', 
    success: function(res) { 
     var text = res.responseText; 
     // then you can manipulate your text as you wish 
    } 
}); 
+0

Totalmente relacionado con esta pregunta, pero pensé que podría encontrar [este JSFiddle] (http://jsfiddle.net/dcfWV/1 /) interesante. Está relacionado con la pregunta que publicaste ayer. – IgnisErus

0

Desde peticiones AJAX jQuery fallan si son varios dominios, puede utilizar el enrollamiento (en PHP) para configurar un servidor proxy.

Supongamos que un responder.php archivo PHP tiene estos contenidos:

$url = "https://www.google.com"; 
$ch  = curl_init($url); 
curl_set_opt($ch, CURLOPT_RETURNTRANSFER, "true") 
$response= curl_exec($ch); 
curl_close($ch); 
return $response; 

Su petición AJAX debe ser a este archivo responder.php para que ejecute la solicitud de varios dominios.

0

probar esto

alert(data['responseText']);