Как получить JSON через jQuery.ajax в Google App Engine

0

Я создаю клон Google Forms, который создаст форму, а затем сохранит ее на сервере. Конструктор форм выводит этот формат JSON.stringify:

{"method":"post","action":"/test","html":[{"input_type":"input_text","caption":"What is your name?"},{"input_type":"radio","caption":"What is the name of your dog?","options":{"benny":"Benny","billy":"Billy","bobby":"Bobby"}}]}

Я пытаюсь отправить это в мой бэкэнд App Engine следующим образом:

$.ajax({
    type: "POST",
    url: save_url,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: json_string,
    success: function (e) {
        console.log(e);
    }
});

Но как мне "открыть" эту строку json на моем сервере, чтобы я мог вставить ее в мою базу данных?

Первый вопрос: следует ли использовать self.request.body для получения объекта данных (json string) или есть лучший способ его получить. Прямо сейчас я декодировал строку, чтобы получить правильный формат.

def post(self):
    form_elements = json.loads(urllib.unquote_plus(self.request.body))
    self.write(form_elements)

Второй вопрос: используя json.loads для синтаксического анализа строки json, я получаю эту ошибку: ValueError: No JSON object could be decoded Почему он не понимает, что это json?

Теги:
google-app-engine

1 ответ

4
Лучший ответ

Вот что я делаю, извлеченный из рабочего кода и разделенный на основные биты.

  var blob = JSON.stringify(stuff);
  $.ajax('/api/', {
    'type': 'POST',
    'async': false,
    'data': {
      'json': blob,
     },
     'dataType': 'json',
  }).done(function(data) {
    // ...
  }


def post(self):
    blob = self.request.get('json')
    try:
        stuff = json.loads(blob)
    except:
        # ...

Я не пробовал использовать все request.body.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню