Bonjour,
J'essaye de récupérer des données en AJAX, à l'aide de jQuery. Ma fonction récupère la géolocalisation du navigateur, puis envoie une requête REST sur les serveurs de GeoNames pour pouvoir avoir la ville et le pays du visiteur du site. Voici mon code :
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Récupère l'adresse du visiteur
function recupererAdresse()
{
  // Affiche la barre de chargement
  $("#parcours").html("<img src=\"chargement.gif\" alt=\"Chargement...\" />");
 
  if (navigator.geolocation)
  {
    navigator.geolocation.getCurrentPosition(recupererPosition, erreurPositionnement);
  }
  else
  {
    alert("La g\351olocalisation n\'est pas support\351e par votre navigateur.");
 
    // Arrête l'affichage de la barre de chargement
    $("#parcours").empty();
  }
}
 
// Récupère la position du visiteur
function recupererPosition(position)
{
  jQuery.support.cors = true;
 
  $.ajax(
  {
    // Paramètre la requête AJAX
    url       : "http://ws.geonames.org/findNearbyPlaceName",
    dataType  : "xml",
    data      :
    {
      lang  : "fr",
      type  : "xml",
      lat   : position.coords.latitude,
      lng   : position.coords.longitude
    },
    beforeSend  : function()
    {
      // Affiche la barre de chargement
      $("#parcours").html("<img src=\"chargement.gif\" alt=\"Chargement...\" />");
    },
    success     : function(resultat)
    {
      // Arrête l'affichage de la barre de chargement
      $("#parcours").empty();
 
      // Récupère les informations reçu via GeoName.org
      $("#rue").val("");
      $("#ville").val($(resultat).find("name").text());
      $("#pays").val($(resultat).find("countryName").text());
    },
    error       : function(xhr, ajaxOptions, thrownError)
    {
      // Arrête l'affichage de la barre de chargement
      $("#parcours").empty();
 
      // Affiche le message d'erreur
      alert("Une erreur c\'est produite :\n" + thrownError + ".");
    }
  });
};
 
// Affiche un message s'il y a une erreur de positionnement
function erreurPositionnement(erreur)
{
  switch(erreur.code)
  {
    case erreur.PERMISSION_DENIED:
      alert("L\'utilisateur a refus\351 la demande de g\351olocalisation.");
      break;
    case erreur.POSITION_UNAVAILABLE:
      alert("L\'information de localisation est indisponible.");
      break;
    case erreur.TIMEOUT:
      alert("La demande de localisation de l\'utilisateur a expir\351.");
      break;
    case erreur.UNKNOWN_ERROR:
      alert("Une erreur inconnue c\'est produite.");
      break;
  }
}
Sous Firefox ou Chrome, le code passe impeccable. Mais avec Internet Explorer 9 j'ai droit au message :
Une erreur c'est produite :
No Transport.
Ou :
Une erreur c'est produite :
Error: Accès refusé.
Si j'ajoute la ligne :
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
jQuery.support.cors = true;
Avant d'exécuter ma requête, comme préconisé dans le ticket #10660 de jQuery.
Quelqu'un pourrait éclairer ma lanterne sur ce bogue d'Internet Explorer ?