2009-09-16 6 views
0

J'essaie d'accéder à une API tierce sur http en utilisant jquery .ajax (ou .get, .post, etc.). L'API réside sur ma machine àUtilisation de JQuery pour accéder à un service de données/API sur plusieurs domaines

http://localhost:7777/server/<method>?<args> 

Le serveur dispose d'une pile de méthodes pour interroger son serveur OLAP tels que login (qui renvoie une clé de connexion à utiliser avec d'autres méthodes), les bases de données (qui répertorie les bases de données sur le serveur), des cubes, des dimensions etc etc

par exemple

pour vous connecter au serveur

http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3

Si J'entre cela dans une barre d'adresse du navigateur, je récupère les bonnes données.

Cependant, je veux faire une petite page web pour tester les appels et j'ai pensé que je devrais être capable d'utiliser jQuery pour créer les Gets et retourner les données qui sont allées au navigateur.

Heres mon code

<html> 
<head> 
    <title>Palo Test Report</title> 
    <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script> 
     <script type="text/javascript" language="javascript">    
     function calculate(){ 
      $.ajax({ 
       type:"GET", 
       url:"http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3&callback=?", 
       success: function(data,textStatus){ 
        alert(data + ":" + textStatus); 
       } 
       , 
       error: function(request,errorStatus,errorThrown){ 
        alert("Error:" + errorThrown); 
       } 
      }); 
     } 
    </script> 
</head> 
    <body> 
     <div>Sample Palo Report #1</div> 
     <input type="button" value="Calculate" onclick="calculate();" /> 
    </body> 
</html> 

La méthode va de au serveur et frappe le rappel de succès. Cependant, le paramètre de données est une chaîne vide. J'ai lu quelques articles sur les problèmes d'accès interdomaines via ajax et il semble que ce soit le cas lorsque le service fonctionne sur un port différent, même si je suis un peu surpris par le drapeau "succès". Une autre chose étrange est que si je crée un nouveau répertoire virtuel dans IIS et y dépose le fichier, j'appelle le callback d'erreur avec un paramètre errorThrown vide. Le service/api renvoie des chaînes simples, pas json, donc getJSON ne fonctionne pas.

Est-ce que j'essaye avec jQuery?

J'ai une solution de contournement mais c'est vraiment moche!

Merci à l'avance

G

Répondre

1

appels Ajax sont limités sur le même domaine. Vous avez besoin de jsonP pour interroger un domaine tiers. Vérifiez ajax() méthode jsonP option.

MISE À JOUR

CORS (Cross-origin resource partage) est également présent que le travail de projet w3c.

+0

Ce n'est plus vrai. La plupart des gens considèrent que 'JSONP' et' CORS' sont des appels Ajax. Les deux nécessitent un support du serveur. – hippietrail

+0

@hippietrail Ajouté –

2

Je suppose que votre page Web de test est situé sur http://localhost:7777 parce que cela ne fonctionnerait pas autrement.

$.ajax fonctionne comme prévu, mais puisque vous n'avez pas fourni l'option dataType: "jsonp":

  • il considère que les données récupérées sont XML ou HTML (un "intelligent" deviner selon la doc, mais nous savons tous ce que l'intelligence signifie vraiment quand il s'agit d'algorithmes)
  • cela ne dérange pas de gérer le callback =? morceau de l'URL (si on trace le trafic réseau avec quelque chose comme Firebug, vous pouvez facilement contrôler que le rappel =? partie de l'URL reste comme il est)

Maintenant, la réponse du serveur est certainement pas XML ni HTML, mais la requête a réussi. Donc vous finissez avec votre callback de succès étant appelé avec un paramètre de données vide (bien que je m'attendais à un document HTML de base avec le texte de réponse dans son corps).

Ajoutez simplement dataType: "jsonp" dans vos options et cela devrait fonctionner comme prévu.

Questions connexes