Я пытаюсь получить (последние) Web.py и AJAX, чтобы играть друг с другом, но до сих пор мне не повезло.Не удается заставить Web.py и jQuery выработать запрос AJAX GET (вместо этого он обращается к запросу OPTIONS)
Короче говоря, я запускаю как серверную (Web.py), так и клиентскую часть (Javascript) на своем локальном компьютере разработки, но почему-то все мои запросы AJAX GET отображаются как запросы OPTION. Из того, что я читал, это типичные случаи междоменных запросов, но поскольку я запускаю это на localhost, я не уверен, что происходит.
Вот код на стороне сервера:
import web
import json
def make_text(string):
return string
urls = ('/', 'mainScreen',
'/update', 'update'
)
app = web.application(urls, globals())
global content
content = {'key1': 'value1', 'key2': 'value2'}
def getPayload():
return content
class mainScreen:
def GET(self):
web.header('Content-Type', 'application/json')
web.header('Access-Control-Allow-Origin', '*')
web.header('Access-Control-Allow-Credentials', 'true')
return getPayload()
def OPTIONS(self):
web.header('Content-Type', 'application/json')
web.header('Access-Control-Allow-Origin', '*')
web.header('Access-Control-Allow-Credentials', 'true')
return getPayload()
class update:
def POST(self):
global content
content = web.input(_method='post')
return "DONE."
if __name__ == '__main__':
app.run()
Вот код на стороне клиента:
<html>
<head>
<title>WTF</title>
<script type="text/javascript" src="../static/jquery.js"></script>
<script type="text/javascript">
function dial()
{
console.log("Fire in the hole!");
$.ajax({
url: 'http://0.0.0.0:8080',
contentType: 'application/jsonp',
timeout : 5000,
cache: false,
success: function (data) {
console.log('[ajax] Connection successful! ' + JSON.stringify(data));
},
error:function (jqXHR, textStatus, errorThrown){
console.log(JSON.stringify(jqXHR) + ' ' + textStatus +' '+errorThrown);
}
});
console.log("Done.");
}
$(function() {
dial();
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
Это выход Firebug в:
Пожар в отверстие! index.html (строка 9) СОВЕРШЕННО.
index.html (строка 24) [ajax] Соединение успешно! ""
index.html (строка 17)
Обратите внимание, что "" указывает, что запрос получили пустые данные.
Это то, что сеть панель Firebug показывает:
Если я открыть страницу, которая Firebug указывает на данные там хорошо, но если я, довольно просто открыть http://0.0.0.0:8080/
в любом браузере, данные отображаются в виде ожидается! Что здесь происходит?
Наконец, вот журнал web.py в:
[email protected]:~/Desktop/tut$ python app.py
http://0.0.0.0:8080/
127.0.0.1:43796 - - [26/Jul/2013 11:14:59] "HTTP/1.1 OPTIONS /" - 200 OK
Я кодирования в Ubuntu 12.04 LTS, кстати.
PS: Я также попытался изменить заголовок ответа в web.py на:
web.header('Content-Type', 'text/plain')
, но это не сработало.
PS2: Изменение адреса сервера на клиентском скрипте на «127.0.0.1:8080» или «localhost: 8080» тоже не помогло.