Вишня / JQuery CORS неприятности

У меня есть простой веб-сервер на Python, основанный на cherrypy. Его ресурсы должны предоставлять API. Сервер имеет следующий код для обеспечения CORS:

def CORS():
    cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"

if __name__ == "__main__":
    cherrypy.tools.CORS = cherrypy.Tool('before_finalize', CORS)
    cherrypy.quickstart(PyCachedAdmin(), config={'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}})

сервер работает на локальном хосте:8080. Теперь у меня есть HTML-файл, доступный на localhost (порт 80 по умолчанию), который загружает jquery 1.9. Я открываю консоль браузера, чтобы попробовать $.ajax выполнить любой AJAX-запрос к серверу cherrypy. Я пытался:

$.ajax({
  url:'http://localhost:8080/',
  type: "POST",
  dataType: "json",
  data: {command:"version"}
}).done(function(){
  console.log('hej');
});

а также

$.ajax({
  url:'http://localhost:8080/',
  type: "POST",
  crossDomain: true,
  dataType: "jsonp",
  data: {command:"version"}
}).done(function(){
  console.log('hej');
});

а также

$.support.cors = true

и ничего не получалось. Я получаю либо XMLHttpRequest cannot load http://localhost:8080/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. или же GET http://localhost:8080/?callback=jQuery19102827550224028528_1382823727186&command=version&_=1382823727187 404 (Not Found) при использовании jsonp (загадочно, что он отправляет GET вместо POST). Есть несколько похожих вопросов, я попробовал их, и это мои результаты (что-то все еще не так).

PS с сервером все в порядке, так как все тесты на керлинг проходят. Что-то не так с междоменными вещами.

1 ответ

Вы активируете инструмент CORS? Вы можете использовать инструмент, украшая методы вызова или установить его в конфигурации.

Учитывая, что реализация PyCachedAdmin не выражен в вопросе, я могу предположить, что, вероятно, вы не активируете инструмент, для этого вам просто нужно изменить словарь конфигурации и сделать что-то вроде этого:

    cherrypy.quickstart(PyCachedAdmin(),
                        config={
                            '/': {
                               'request.dispatch':
                                    cherrypy.dispatch.MethodDispatcher(),
                               'tools.CORS.on': True}})

Или если методы, которые вы используете на PyCacheAdmin уже был оформлен или использует _cp_config что дополнительная настройка не требуется, и эти ответы не помогут вам.

Другие вопросы по тегам