XMLHttpRequest не удается загрузить http://localhost:8080/exist/rest/db / ... Origin null не допускается Access-Control-Allow-Origin
Я пытаюсь получить ответ XML с помощью ajax-вызовов к существующему API REST DB (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);
}
});
я прочитал некоторые связанные вопросы по этой же проблеме, но я не нашел удачи ни с одним из решений, которые я пытался.
индекс.html, который содержит сегмент кода ajax выше, доступен с моей локальной машины следующим образом:
file:///.../index.html
я попытался выполнить chrome следующим образом:
chrome.exe --allow-file-access-from-files
кроме того, я попытался развернуть файл на онлайн-хосте, чтобы он находился в
http://www.<somedomain>.com/index.html
самым близким решением, которое у меня было, было изменить тип данных из 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.минута.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) или binserver.летучая мышь (в 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.минута.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, по-видимому, является ненужной проблемой, с которой я столкнулся. Режим сервера не работал с моей машиной, поэтому появились ошибки выше.
1 ответов
Это междоменный запрос и не допускается. Тест с localhost вместо file://. Кроме того, удаленный сервер должен вернуть правильный CORS заголовки, если он предназначен для работы с любым типом данных, кроме JSONP. Тип данных JSONP не предназначен для возврата XML.