Как получить данные AJAX в CherryPy
Начиная подниматься по кривой обучения ajax, я пытаюсь сделать простой вызов ajax обратно в мое приложение CherryPy и повторить данные, отправленные обратно в браузер.
Мой вызов ajax работает, и я могу вернуть, например, метод запроса обратно в браузер.
Однако я не могу найти данные, отправленные браузером в объекте запроса внутри моего обработчика CherryPy. Вот мой обработчик CherryPy, вырезанный из этого вопроса:class Contact:
def index(self):
cl = cherrypy.request.headers['Content-Length']
rawbody = cherrypy.request.body.read(int(cl))
body = None
#body = simplejson.loads(rawbody)
if body is None:
return cherrypy.request.method + ' (no body found)'
else:
return cherrypy.request.method + ' ' + body
index.exposed = True
И вот мой Javascript:
<script type="text/javascript">
function SendContactEntry() {
$.ajax( {type: "POST",
url: "/contact/",
data: { word: "HELLO" },
processData: false,
cache: false,
contentType: "application/json",
dataType: "text",
success: function (response){
alert(response);
}
}
);
}
</script>
Используя этот код, мой браузер получает ответ "POST (No body found)".
Что я хочу сделать, так это узнать в моем обработчике CherryPy, что мне было отправлено значениеword
"HELLO".
Если я раскомментирую строку body = simplejson.loads(rawbody)
, я получу HTML-статус 500 back от CherryPy. То же самое происходит, если я пытаюсь украсить свою функцию index() с помощью @cherrypy.tools.json_in()
.
2 ответа:
Поскольку вы установили
processData
вfalse
и передаете объект, вы посылаете по Строковой версии вашего объекта данных - и там ничего не видно.Либо:
- вызовите
JSON.stringify
объект данных перед его отправкой (что должно заставить ваш вызовsimplejson.loads
работать).- удалите атрибут
processData
и позвольте jQuery отправить запрос в виде обычного запроса с кодировкой URL (и вы можете получить доступ к своим переменным черезrequest.params["word"]
).
word
может быть, уже вcherrypy.request.params
. Проверить там?Http://www.cherrypy.org/wiki/RequestObject#params
Я не думаю, что jQuery преобразует материал, который вы помещаете в
data
, в объект JSON. http://api.jquery.com/jQuery.ajax/