Как выполнить запрос Ajax к CouchDB (http://<usename>.couchone.com/) - PullRequest
4 голосов
/ 26 сентября 2010

Я пытаюсь создать простой AJAX (через jQuery) запрос к http://yourusername.couchone.com/ (почти так же, как если бы я установил couchdb на localhost)

Если я перехожу на http://**yourusername**.couchone.com/ через Browser Iполучим: {"couchdb":"Welcome","version":"1.0.1"} Итак, это похоже на сериализованный JSON.

Итак, я написал код JS:

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

            });
    });

Но код не работает.Консоль FireBug показывает, что на запрос GET нет ответа (вся строка выделена красным). Все, что я вижу, это заголовок запроса и заголовок ответа, но НЕТ ДАННЫХ (как ответ)

ЗапросЗаголовок:

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

Заголовок ответа:

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

Идеи?Предложения?

PS Извините за плохой английский

Ответы [ 2 ]

10 голосов
/ 29 января 2011

Я бы сказал, что MightyE абсолютно прав, вплоть до постскриптума - CouchOne действительно поддерживает JSONP. Перейдите к http://YOURSITE.couchone.com/_utils/config.html и измените allow_jsonp в разделе httpd на true. После этого

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

будет работать.

5 голосов
/ 26 сентября 2010

Межсайтовая модель безопасности не позволяет вам выполнять запросы JSON к другому домену.

Вам необходимо использовать JSONP , чтобы выполнить это.Это делает запрос как <script> include вместо XMLHTTPRequest.<script> включает не имеют ту же модель безопасности.

Я не знаю, поддерживает ли couchdb JSONP.Обычно запрос на JSONP выглядит следующим образом:

http://someUrl/somePath?jsonp=mycallback

Данные ответа считывают этот параметр jsonp и возвращают действительный javascript для выполнения в контексте родительской страницы:

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

Вы должны бытьВы уверены, что доверяете провайдеру JSONP, потому что по сути вы предоставляете им доступ к своей странице для выполнения JavaScript.В вашем случае вы, вероятно, делаете это, поскольку это ваша собственная база данных couchdb.

Другого решения не существует, стандартный $ .getJSON () не будет работать, если переданный URL не совпадает с доменом вашей страницы.

PS Я посмотрел на couchone.com и не вижу ничего, что подсказывало бы, что они поддерживают JSONP.Вам понадобится ваш собственный серверный скрипт-обертка, который просто перенаправляет запрос на couchone и отправляет ответ оптом (что имеет преимущество скрытия вашего фактического URL-адреса провайдера couchdb), либо для поиска другого провайдера, который поддерживает JSONP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...