Я использую функцию jJuery AJAX, например так:
$.ajax ({ "url" : "/note",
"async" : true,
"type" : "POST",
"data" : {"id" : id, "content" : el.value}
});
На сервере (Python Google App Engine, в настоящее время использующий webapp.RequestHandler), запросы PUT обрабатываются той же функцией, которая обрабатывает POSTзапросы, например, так:
class uNote(webapp.RequestHandler):
def post(self):
user = users.get_current_user()
if user:
logging.critical("ID: " + self.request.get('id'))
note = stickynote.db.get( self.request.get('id') )
if note:
content = self.request.get( 'content' )
if content:
note.content = content
else:
note.x = int(self.request.get('x'))
note.y = int(self.request.get('y'))
note.z = int(self.request.get('z'))
note.put()
self.response.out.write ( "true" );
else:
self.response.out.write ("no id found")
def put(self):
user = users.get_current_user()
if user:
logging.critical("ID: " + self.request.get('id'))
note = stickynote.db.get( self.request.get('id') )
if note:
content = self.request.get( 'content' )
if content:
note.content = content
else:
note.x = int(self.request.get('x'))
note.y = int(self.request.get('y'))
note.z = int(self.request.get('z'))
note.put()
self.response.out.write ( "true" );
else:
self.response.out.write ("no id found")
Если я сделаю запрос POST, все работает.Если я изменяю его на запрос PUT (путем изменения типа вызова AJAX), ничего не работает.Если я проверяю журналы для GAE, я вижу:
BadKeyError: Invalid string key .
Это результат того, что я регистрирую идентификатор для каждого звонка:
ID: ahFkZXZ-YXp2ZC13ZWJub3Rlc3ItCxIKU3RpY2t5Tm90ZSIQdGVzdEBleGFtcGxlLmNvbQwLEgdzbk1vZGVsGAIM (from the POST call)
ID: (from the PUT call)
Так что очевидно, что он не проходит идентификатор правильнодля вызовов PUT, поэтому хранилище данных выдает мне ошибку BadKeyError.Я не уверен, является ли это проблемой на стороне jQuery, или это на стороне GAE, и я понятия не имею, что происходит.Любая помощь будет оценена.