2009-07-20 15 views
21

Né:jquery ajax get responseText da http URL

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); 
}); 

mi danno un oggetto. Come posso accedere allo responseText?

risposta

3

nelle funzioni ajax jQuery, la firma il successo callback è:

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

a seconda del tipo di dati che hai chiesto, utilizzando il parametro 'dataType', si otterrà l'argomento 'data'.

dalla documentazione:

dataType (String) Default: Indovina intelligente (XML o HTML). Il tipo di dati che ci si aspetta dal server. Se nessuno è specificato, jQuery trasmetterà in modo intelligente responseXML o responseText al callback di successo, in base al tipo MIME della risposta.

I tipi disponibili (e il risultato passato come primo argomento per il vostro successo callback) sono:

"xml": Restituisce un documento XML che può essere trasformati tramite jQuery.

"html": restituisce HTML come testo normale; i tag script inclusi vengono valutati quando inseriti nel DOM.

"script": valuta la risposta come JavaScript e la restituisce come testo normale. Disabilita la memorizzazione nella cache a meno che non venga utilizzata l'opzione "cache". Nota: questo trasformerà i POST in GET per le richieste di dominio remoto.

"JSON": valuta la risposta come JSON e restituisce un oggetto JavaScript.

"jsonp": Carichi in un blocco JSON utilizzando JSONP. Aggiungerà un ulteriore "? Callback =?" alla fine del tuo URL per specificare il callback. (Aggiunto in jQuery 1,2)

"testo": Una stringa di testo normale.

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

+0

vedere prima altro commento - la risposta è vuota -> nessun testo googleHtml ?! come risposta: -/ –

30

Devi semplicemente riscrivere in quel modo:

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

alert(response); 
+0

mmh l'ho provato in ie8 e ff3.5.1 - in ff non funzionerà ?! –

+0

è vuoto -> nessuna risposta - ma perché? –

+3

@all - cross domain ajax non funziona a meno che il dominio non abbia jsonp abilitato - quale google non fa – karim79

20

Come ha detto Karim, croce dominio ajax non funziona a meno che il server lo consente. In questo caso Google non lo fa, MA, c'è un semplice trucco per aggirare questo in molti casi. Basta che il tuo server locale passi il contenuto recuperato tramite HTTP o HTTPS.

Ad esempio, se si sta utilizzando PHP, si potrebbe:

Creare il file web_root/ajax_responders/google.php con:

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

E poi modificare il codice per connettersi a che, invece di al dominio di Google direttamente nella javascript:

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

Per prima cosa è necessario scaricare un plug-in JQuery per consentire richieste tra domini. Scaricalo qui: https://github.com/padolsey/jQuery-Plugins/downloads

Importare il file chiamato query.xdomainsajax.js nel progetto e includerlo con questo codice:

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

Per ottenere il codice HTML di una pagina web esterna nel testo modulo è possibile scrivere questo:

$.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 estraneo a questa domanda, ma ho pensato che potreste trovare [questo JSFiddle] (http://jsfiddle.net/dcfWV/1 /) interessante. È legato alla domanda che hai postato ieri. – IgnisErus

0

Poiché le richieste jQuery AJAX falliscono se sono cross-domain, è possibile utilizzare cURL (in PHP) per impostare un server proxy.

Supponiamo che un file PHP responder.php ha questi contenuti:

$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; 

La richiesta AJAX dovrebbe essere a questo file responder.php in modo che esegue la richiesta di cross-domain.

0

provare questo

alert(data['responseText']);