2010-09-26 7 views
4

J'essaie de créer une simple requête AJAX (via jQuery) à http: // votre nom d'utilisateur .couchone.com/(alsmost la même chose que si je l'avais installé CouchDB sur localhost)Comment puis-je effectuer une requête Ajax à CouchDB (http: // <usename> .couchone.com /)

Si je vais à http://**yourusername**.couchone.com/ via un navigateur, je vais: {"couchdb":"Welcome","version":"1.0.1"}, il semble donc comme 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 demande GET n'a pas de réponse (la ligne entière est en rouge) Tout ce que je peux voir est une demande en-tête et réponse en-tête, mais pas de données (comme réponse)

Demande en-tête:

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 

Réponse en-tête:

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 

Idées? Suggestions?

P.S. Désolé pour un mauvais anglais

+1

La limitation du navigateur ne devrait pas vous permettre de charger des données si elles ne proviennent pas du même domaine. Vérifiez la zone des notes supplémentaires. http://api.jquery.com/jQuery.getJSON/ – xar

Répondre

5

Le modèle de sécurité intersite vous empêche de faire des requêtes JSON vers un domaine différent. Vous devez utiliser JSONP pour pouvoir accomplir cela. Il fait la demande en tant que <script> inclure au lieu d'un XMLHTTPRequest. <script> inclut ne pas avoir le même modèle de sécurité.

Je ne sais pas si couchdb supporte cependant JSONP. En général, la demande de JSONP ressemble à ceci:

http://someUrl/somePath?jsonp=mycallback 

Les données de réponse indique que le paramètre jsonp et retourne javascript valide pour exécuter dans le contenxt de page parent:

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

Vous devez être sûr que vous faites confiance à la Fournisseur JSONP, car vous leur donnez essentiellement l'accès à l'exécution javascript à votre page. Dans votre cas, vous le faites probablement puisque c'est votre propre base de données couchdb.

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

P.S. J'ai regardé couchone.com, et je ne vois rien qui suggère qu'ils soutiennent JSONP. Vous allez avoir besoin de votre propre script wrapper côté serveur qui transmet simplement la requête à couchone et renvoie la réponse en gros (ce qui a l'avantage de masquer votre URL de fournisseur couchdb), ou de trouver un autre fournisseur qui supporte JSONP .

+0

J'ai entendu parler de CouchApps, ils vivent dans un navigateur comme un seul HTML avec JS et peuvent effectuer une requête AJAX à un serveur CouchDB. Tant que je sais que la conversation Ajax avec couchdb est LE point, couse vous n'avez besoin d'aucun langage côté serveur du tout (c'est-à-dire PHP) –

10

Je dirais que MightyE est tout à fait exact, jusqu'au post-scriptum - CouchOne supporte JSONP. Passez au http://YOURSITE.couchone.com/_utils/config.html et remplacez allow_jsonp dans la section httpd par true. Après cela,

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

fonctionnera.

+1

+1: Merci pour l'indication allow_jsonp! Travaux! (allow_jsonp a été désactivé sur mon 1.2.1 couchdb par défaut) –