GoogleAppEngine JSON объект с использованием JavaScript - PullRequest
1 голос
/ 02 августа 2010

Я хочу создать словарь, содержащий массив, и отправить его в GAE, используя ajax-запрос jquery.что-то вроде {'a':'text', 'b':'othertext','c':['texta','textb']}, которое я создаю вручную.Я могу получать и обрабатывать a и b, используя self.request.get в GAE, но не c.

Есть ли другой способ создания объекта JSON в js?Пожалуйста, предложите, что не так в этом методе.

Ответы [ 3 ]

4 голосов
/ 02 августа 2010

Вы на самом деле не отправляете JSON на сервер.Когда вы передаете объект jQuery.ajax (или оболочкам get / post), он будет сериализован в переменные GET или POST, а не в JSON, поэтому ваш объект будет преобразован во что-то вроде этого:

a=text&b=othertext&c[]=texta&c[]=textb

Если вы хотите передать весь объект как JSON, вы можете преобразовать его самостоятельно, вызвав JSON.stringify (вам нужно будет включить json2.js для браузеров, которые не поддерживаютобъект JSON изначально).Затем вы можете обернуть JSON-кодированную строку в карту любым именем, которое вам нужно:

jQuery.post(url, { json: JSON.stringify({a:'text', ...}) }, ...);

На стороне сервера вы можете получить доступ к тексту JSON, вызвав self.request.get("json").Затем вам нужно будет проанализировать строку JSON для извлечения значений.Я не знаю много о Python, но, видимо, вам просто нужно импортировать django.utils.simplejson и позвонить simplejson.loads(json).

2 голосов
/ 02 августа 2010

Предположительно, GAE self.request.get не может сериализовать сложный объект, например массив строк, в формат запроса GET (?a=text&b=othertext...).

Один из обходных путей, хотя, возможно, и не очень аккуратный, заключается в том, чтобы самим сериализовать значение в JSON и передать его:

var jsonObj = {
               'a':'text', 
               'b':'othertext', 
               'cJSON': JSON.stringify(['texta', 'textb'])
              };

... и, конечно, вам придется десериализовать cJSON на принимающей стороне.

1 голос
/ 02 августа 2010

На самом деле вы отправляете параметры запроса в кодировке, а не JSON.JQuery, вероятно, кодирует список в виде нескольких значений для одного и того же параметра, что означает, что вы можете получить к нему доступ, используя self.request.get_all, который вернет список - self.request.get вернет только первое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...