2010-07-23 3 views
7

Gibt es eine Möglichkeit, Daten zu einer Couchdb hinzufügen, die auf einer anderen Domäne ausgeführt wird und erhalten eine Antwort, ob die Operation erfolgreich war oder nicht? Ich weiß, dass Couchdb Jsonp Callback unterstützt, aber kann ich Daten mit diesem Ansatz hinzufügen?Hinzufügen von Daten zu couchdb mit jsonp Antwort

Antwort

10

Nein, das ist derzeit nicht möglich. CouchDBs REST-API benötigt eine POST- oder PUT-Anfrage, um Daten einzufügen, aber JSONP unterstützt nur GET-Anfragen. So können Sie Daten von CouchDB über Domänen abrufen, aber Updates/Einfügungen/Löschungen werden nicht funktionieren.

8

Sie können clientseitige Javascript verwenden, um ein Formular zum Ausführen des POST zu erstellen, die Ausgabe an einen Iframe zu leiten und iframe-Messaging über mehrere Fenster hinweg zu verwenden, um das Ergebnis zu erhalten.

Natürlich hat jemand schon eine nette Javascript-Bibliothek dafür gemacht. Holen Sie sich den Code hier: https://github.com/benvinegar/couchdb-xd

Folgen Sie den Anweisungen, um es als zusätzliche Datenbank auf Ihrem couchdb-Server zu schieben. Dann auf jeder Website, umfasst eine nicht in der 'your-Couch-Server Domäne, können Sie folgendes tun (nur versuchen, es in der JavaScript-Konsole):

jQuery.getScript(
    "http://YOUR-COUCH-SERVER/couchdb-xd/_design/couchdb-xd/couchdb.js", 
    function() { 
     Couch.init(
      function() { 
       var s = new Couch.Server('http://YOUR-COUCH-SERVER/'); 
       var d = new Couch.Database(s,'YOURDB'); 
       d.put(
        "stackoverflow-test 1", 
        { foo: 111, bar: 222 }, 
        function(resp) { 
         console.log(resp);   
        } 
       ); 
      } 
     ) 
    } 
); 

Die oben geht davon aus Sie haben jquery bereits auf der Seite geladen. Wenn nicht, müssen Sie es hinzufügen, wie Sie gerade mit der anderen Seite interagieren.

Die Bibliothek funktioniert nur mit modernen Browsern mit window.postMessage() - Unterstützung, obwohl ein kleiner Patch es älteren Browsern eventuell erlauben kann, ihn über src/hash-Kommunikation zu benutzen.