Ni:
var response = $.ajax({
type: "GET",
url: "http://www.google.de",
async: false,
success : function() {
alert (this);
}
});
Ni:
var response2 = $.get("http://www.google.de", function(data) {
alert("Data Loaded: " + data);
});
donne moi un objet. Comment avoir accès à la responseText
?
Vous devez simplement le réécrire comme ça:
var response = '';
$.ajax({ type: "GET",
url: "http://www.google.de",
async: false,
success : function(text)
{
response = text;
}
});
alert(response);
Comme Karim l'a dit, l'ajax interdomaine ne fonctionne que si le serveur le permet. Dans ce cas, Google ne le fait pas, MAIS, dans de nombreux cas, il existe une astuce pour contourner ce problème. Demandez simplement à votre serveur local de transmettre le contenu récupéré via HTTP ou HTTPS.
Par exemple, si vous utilisiez PHP, vous pourriez:
Créez le fichier racine_Web/ajax_responders/google.php avec:
<?php
echo file_get_contents('http://www.google.de');
?>
Et modifiez ensuite votre code pour vous connecter à celui-ci au lieu du domaine de Google directement dans le javascript:
var response = $.ajax({ type: "GET",
url: "/ajax_responders/google.php",
async: false
}).responseText;
alert(response);
dans jquery ajax, la signature de rappel de succès est la suivante:
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
en fonction du type de données que vous avez demandé, en utilisant le paramètre 'dataType', vous obtiendrez l'argument 'data'.
des docs:
dataType (String) Valeur par défaut: Intelligent Guess (xml ou html) . Type de données que vous attendez du serveur. Si aucun n'est spécifié, jQuery transmettra intelligemment responseXML ou responseText à votre rappel de succès, en fonction du type MIME de la réponse.
Les types disponibles (et le résultat transmis comme premier argument à votre rappel de succès) sont les suivants:
"xml": Retourne un document XML pouvant être traité via jQuery.
"html": renvoie HTML en texte brut; Les balises de script incluses sont évaluées lors de leur insertion dans le DOM.
"script": évalue la réponse en JavaScript et la renvoie sous forme de texte brut. Désactive la mise en cache sauf si l'option "cache" est utilisée. Remarque: Ceci transformera les POST en GET pour les requêtes de domaine distant.
"json": évalue la réponse en tant que JSON et renvoie un objet JavaScript.
"jsonp": Charge un bloc JSON à l'aide de JSONP. Ajoutera un extra "? Callback =?" à la fin de votre URL pour spécifier le rappel. (Ajouté dans jQuery 1.2)
"texte": Une chaîne de texte en clair.
Le seul moyen que je connaisse vous permettant d'utiliser ajax inter-domaine est JSONP ( http://ajaxian.com/archives/jsonp-json-with-padding ).
Et voici un article qui publie diverses techniques pour réaliser des ajax inter-domaines ( http://usejquery.com/posts/9/the-jquery-cross-domain-ajain-guide )
Vous devez d’abord télécharger un plugin JQuery pour autoriser les requêtes interdomaines . Téléchargez-le ici: https://github.com/padolsey/jQuery-Plugins/downloads
Importez le fichier nommé query.xdomainsajax.js dans votre projet et incluez-le avec le code suivant:
<script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script>
Pour obtenir le HTML d'une page Web externe sous forme de texte, vous pouvez écrire ceci:
$.ajax({
url: "http://www.website.com",
type: 'GET',
success: function(res) {
var text = res.responseText;
// then you can manipulate your text as you wish
}
});
En fait, vous pouvez faire des requêtes entre domaines avec Firefox, voyez ceci pour un aperçu: http://ajaxian.com/archives/cross-site-xmlhttprequest-in-firefox-3
Webkit et IE8 le prennent également en charge d'une certaine manière.
Étant donné que les demandes jQuery AJAX échouent si elles concernent plusieurs domaines, vous pouvez utiliser cURL (en PHP) pour configurer un serveur proxy.
Supposons qu'un fichier PHP responder.php a le contenu suivant:
$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;
Votre demande AJAX doit être adressée à ce fichier responder.php pour qu'il exécute la demande interdomaine.
C'est super vieux, mais j'espère que cela aide quelqu'un. J'envoie des réponses avec des codes d'erreur différents et c'est la seule solution que j'ai trouvée qui fonctionne dans
$.ajax({
data: {
"data": "mydata"
},
type: "POST",
url: "myurl"
}).done(function(data){
alert(data);
}).fail(function(data){
alert(data.responseText)
});
Puisque JQuery déconseille les fonctions success
et error
, vous devez utiliser done
et fail
et accéder aux données avec data.responseText
lorsque vous êtes dans fail
et uniquement avec data
lorsque vous utilisez done
. Ceci est similaire à la réponse de @Marco Pavan, mais vous n'avez pas besoin de plug-in JQuery ni quoi que ce soit pour l'utiliser.