XMLHttpRequest не может загрузить http: // localhost: 8080 / exist / rest / db / Origin null не разрешен Access-Control-Allow-Origin

Я пытаюсь получить ответ XML с помощью вызовов ajax к eXist DB REST API (1).

Google Chrome выдает следующую консольную ошибку:

XMLHttpRequest cannot load XMLHttpRequest cannot load http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies. Origin null is not allowed by Access-Control-Allow-Origin Origin null is not allowed by Access-Control-Allow-Origin

Хотя Firebug в Firefox выдает следующую консольную ошибку:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies 200 OK X 35ms jquery.min.js(line 18)

Вот часть кода, соответствующая ajax:

$.ajax({
                    type: 'GET',
                    dataType: 'xml',
                    url: 'http://localhost:8080/exist/rest/db/movies',
                    data: {
                        _query: _query_value,
                        _key: _key_value,
                        _indent: _indent_value,
                        _encoding: _encoding_value,
                        _howmany: _howmany_value,
                        _start: _start_value,
                        _wrap: _wrap_value,
                        _source: _source_value,
                        _cache: _cache_value
                    },
                    success: function(resp){
                        alert("Resp OK!");
                        console.log(resp);
                    },
                    error: function(hqXHR, textStatus, errorThrown){
                        var x=0;
                        alert("fail0 " + hqXHR + " " + textStatus + " " + errorThrown);
                    }
                });

Я прочитал некоторые вопросы, связанные с этой же проблемой, но мне не повезло ни с одним из решений, которые я пробовал.

Доступ к index.html, который содержит приведенный выше сегмент кода ajax, осуществляется с моего локального компьютера следующим образом:

file:///.../index.html

Я пробовал выполнить хром следующим образом:

chrome.exe --allow-file-access-from-files

Кроме того, я попытался развернуть файл на онлайн-хосте, чтобы он располагался по адресу

http://www.<somedomain>.com/index.html

Ближайшее решение, которое у меня было, заключалось в изменении dataType объекта с xml на jsonp. Ответ был получен, но поскольку ожидается, что это будет xml, ошибка стала связана с синтаксическим анализом, я думаю, со следующим выражением, возвращаемым консолью Google Chrome:

Uncaught SyntaxError: Unexpected token <

и консоль Firebug:

XML can't be the whole program
[Break On This Error]   
</exist:result>
movies...3302057 (line 528, col 15)

Возвращаясь к моему вопросу, как я могу правильно получить XML-документ через eXist DB? Что я делаю не так?

Жду вашей помощи. Я новичок в веб-разработке, и у меня заканчиваются идеи.

Заранее спасибо!

Другие примечания:

Используемый мной jquery.min.js находится по адресу http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

URI http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies работает при прямом вводе в любой браузер.

Ссылка:

(1) - http://www.exist-db.org/exist/devguide_rest.xml;jsessionid=e7096vtg4l7gmocouhe6zhle

Обновления (1) Кажется, мне удалось избавиться от проблемы CORS, запустив eXist DB в качестве сервера следующим образом: bin / server.sh (в UNIX) или bin \ server.bat ( в Windows).

Однако теперь я сталкиваюсь с проблемой другого типа. Я получаю следующую ошибку в консоли Google Chrome при использовании jquery.js:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies  jquery.js:8240
jQuery.ajaxTransport.send jquery.js:8240
jQuery.extend.ajax jquery.js:7719
(anonymous function) index.html:43
jQuery.event.dispatch jquery.js:3332
jQuery.event.add.elemData.handle.eventHandle jquery.js:2941

и используя jquery.min.js:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies  jquery.min.js:18
f.support.ajax.f.ajaxTransport.send jquery.min.js:18
f.extend.ajax jquery.min.js:18
(anonymous function) index.html:43
f.event.handle jquery.min.js:17
f.event.add.i.handle.k jquery.min.js:16

Что означает ошибка? Какую часть кода я делаю неправильно?

(2) Обновление 1, видимо, это ненужная проблема, с которой я столкнулся. На моей машине не работал серверный режим, поэтому появились указанные выше ошибки.


person Paul    schedule 30.05.2012    source источник
comment
возможный дубликат Ошибка XmlHttpRequest: Origin null не разрешено Access-Control-Allow-Origin   -  person jrummell    schedule 30.05.2012


Ответы (1)


Это междоменный запрос и не разрешен. Тестируйте с localhost вместо file: //. Кроме того, удаленный сервер должен возвращать правильные заголовки CORS, если он предназначен для совместной работы -домен с любым типом данных, кроме JSONP. Тип данных JSONP не предназначен для возврата XML.

person Kevin B    schedule 30.05.2012
comment
Спасибо. Я смог прочитать о CORS. Затем я попытался запустить eXist DB в качестве сервера вместо обычного запуска, и теперь я не получаю ту же ошибку происхождения. Вероятно, с этим параметром он возвращает правильные заголовки CORS. Теперь у меня есть еще один набор ошибок, которые мне кажутся чужими. Это в разделе обновлений вопроса. Вы знаете, что все еще не так в моем коде? - person Paul; 30.05.2012
comment
Ошибки мне тоже кажутся чужими. Вы уверены, что смотрите в нужную область консоли? - person Kevin B; 30.05.2012
comment
Да, я смотрел на правильную консоль, но было еще кое-что, что я сделал неправильно. Я упустил из виду тот факт, что в режиме сервера eXist вообще не работал на моей машине. Поэтому мои запросы отправлялись в несуществующий сервис. Я столкнулся с исходной проблемой, но попытался запустить файл с локального хоста, как вы советовали, и это сработало. Большое спасибо! - person Paul; 31.05.2012