Comment effectuer une demande Ajax auprès de CouchDB (http: // .couchone.com /)

J’essaie de créer une simple demande AJAX (via jQuery) à l’adresse http: // votre nom d’ utilisateur .couchone.com / (presque la même chose que si j’avais installé couchdb sur localhost)

Si je vais sur http://**yourusername**.couchone.com/ via le navigateur, j’obtiendrai: {"couchdb":"Welcome","version":"1.0.1"} Donc, cela ressemble à un JSON sérialisé.

J’ai donc écrit un code JS:

 $(function() { $.getJSON('http://www.********.couchone.com/', function(data) { console.log(data.couchdb); console.log(data.version); }); }); 

Mais le code ne fonctionne pas. La console de FireBug montre que la requête GET n’a pas de réponse (la ligne entière est en rouge). Tout ce que je peux voir est un en-tête de requête et un en-tête de réponse, mais PAS DE DONNÉES (en réponse).

En-tête de demande:

 Host : www.*******.couchone.com User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 FirePHP/0.4 Accept : application/json, text/javascript, */* Accept-Language : de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding : gzip,deflate Accept-Charset : ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive : 115 Connection : keep-alive Origin : null 

En-tête de réponse:

 Server : CouchDB/1.0.1 (Erlang OTP/R13B) Date : Sun, 26 Sep 2010 12:45:47 GMT Content-Type : application/json Content-Length : 40 Cache-Control : must-revalidate 

Des idées? Suggestions?

PS Désolé pour le mauvais anglais

modèle de sécurité intersite vous empêche de faire des demandes de JSON à un autre domaine.

Vous devez utiliser JSONP pour être en mesure d’accomplir cela. Il fait la demande en tant que include au lieu d'un XMLHttpRequest. includes ne possède pas le même modèle de sécurité.

Je ne sais pas si CouchDB soutient JSONP bien. Habituellement, la demande de JSONP ressemble à ceci:

 http://someUrl/somePath?jsonp=mycallback 

Les données de réponse lit ce paramètre jsonp et retourne javascript valide pour exécuter dans contenxt de la page parent:

 myCallback({ JSON:data, JSON:data }); 

Vous devez être sûr de faire confiance au fournisseur JSONP, car vous leur donnez essentiellement un access d'exécution javascript à votre page. Dans votre cas, vous faites probablement car il est votre propre firebase database CouchDB.

Il n'y a pas d'autre solution. $ .GetJSON () standard ne fonctionnera pas si l'URL transmise n'est pas le même domaine que votre page.

PS je l'ai regardé couchone.com, et je ne vois rien qui suggère qu'ils soutiennent JSONP. Vous allez avoir besoin de votre propre script d'encapsulation côté serveur qui transmet simplement la demande à couchone et renvoie la réponse en gros (ce qui présente l'avantage de cacher l'URL de votre fournisseur couchdb), ou bien de trouver un autre fournisseur prenant en charge JSONP. .

Je dirais que MightyE a tout à fait raison, jusqu’au post-scriptum – CouchOne supporte JSONP. Accédez à http://YOURSITE.couchone.com/_utils/config.html et allow_jsonp dans la section httpd sur true . Après ça,

 $.ajax({ url: 'http://yoursite.couchone.com/', type: 'get', dataType: 'jsonp', success: function(data) { alert(data.couchdb); alert(data.version); } }); 

marchera.