LINUX.ORG.RU

Bottle не распознает ajax-запрос

 , ,


0

2

Всем привет. Столкнулся с тривиальной на первый взгляд проблемой - попотыкой принять асинхронный запрос с клиента.

Клиентский код:

$.ajax({
		type: "POST",
		url: 'http://localhost:8080/test',
		data: JSON.stringify({'test': 'hello_world'}),
		success: function(data) {
			var r = JSON.parse(data);
			console.log(r);
		},
		dataType: 'json'
});

серверный код:

@route('/test', method=["POST"])
def test():
    print(request.is_ajax) # Always return False
    r = json.load(request.body)
    print("DATA: ", r['test']) # hello_world
    data = {'success': True}
    response.headers['Content-type'] = 'application/json'
    return json.dumps(data)

Так как, почему-то, bottle не распознает запрос как асинхронный, то некорректно возвращает данные (до клиента ответ не доходит).

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


Да ему не нужно «распозновать» запрос как асинхронный, чтобы вернуть json, вместо последних 2-х строк попробуй так -

return data

https://github.com/defnull/bottle.paws.de/blob/master/pages/docs.md#json

request.is_ajax - это только если js библиотека передала соответствующий http заголовок.

до клиента ответ не доходит)

ну а просто в браузере эта страница работает? Подозреваю, что проблема в js.

Вот здесь - data: JSON.stringify({'test': 'hello_world'}), success: function(data) {

может имя переменной в одном из случаев поменять?

pi11 ★★★★★ ()
Последнее исправление: pi11 (всего исправлений: 3)

is_ajax в данном случае — абсолютное не нужно. В экземпляре запроса есть заголовок Content-Type, который может содержать строку application/json + может быть ещё что-то. Зависит от того, что ты укажешь при запросе.

Kilte ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.