Никакой объект JSON не может быть декодирован - вызов RPC POST - PullRequest
0 голосов
/ 02 апреля 2012
var body = JSON.stringify(params);

// Create an XMLHttpRequest 'POST' request w/ an optional callback handler
req.open('POST', '/rpc', async);

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", body.length);
req.setRequestHeader("Connection", "close");

if (async) {
  req.onreadystatechange = function() {
    if(req.readyState == 4 && req.status == 200) {
      var response = null;
      try {
        response = JSON.parse(req.responseText);
      } catch (e) {
        response = req.responseText;
      }
      callback(response);
    }
  };
}

// Make the actual request
req.send(body);

---- на стороне сервера ----

class RPCHandler(BaseHandler):        
'''@user_required'''
def post(self):
    RPCmethods = ("UpdateScenario", "DeleteScenario")
    logging.info(u'body ' + self.request.body)
    args = simplejson.loads(self.request.body)

---- Получите следующую ошибку в теле журнала сервера% 5B% 22UpdateScenario% 22% 2C% 22c% 22% 2C% 224,5% 22% 2C% 2230frm% 22% 2C% 22Refinance% 22% 2C% 22100000% 22% 2C% 22740% 22% 2C% 2294538% 22% 2C% 2250000% 22% 2C% 22owner% 22% 2C% 22sfr% 22% 2C% 22Fremont% 22% 2C% 22CA% 22% 5D =

Нет объекта JSON, который может быть декодирован: строка 1, столбец 0 (символ 0): трассировка (последний последний вызов): Файл "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", строка 703, в вызов файл handler.post (* groups) "/ base /data / home / apps / s ~ mortgageratealert-staging / 1.357912751535215625 / main.py ", строка 418, в файле post args = json.loads (self.request.body)" / base / python_runtime / python_lib / версии / 1 / simplejson/init.py ", строка 388, в загрузках возвращает файл _default_decoder.decode (s)" /base/python_runtime/python_lib/versions/1/simplejson/decoder.py ", строка 402, в декодированном объекте, end = self.raw_decode (s, idx = _w (s, 0) .end ()) файл "/ base / python_runtime /python_lib / Version / 1 / simplejson / decoder.py ", строка 420, в raw_decode повысить JSONDecodeError (« Не может быть декодирован ни один объект JSON », s, idx) JSONDecodeError: Нельзя декодировать объект JSON: столбец 1 строки 0 (символ 0)

--- firebug показывает следующее ---

Параметры application / x-www-form-urlencoded ["UpdateScenario", "c", "4 ....
Source ["UpdateScenario", "c", "4.5", "30frm", "Refinance", "100000", "740", "94538", "50000", "owner", "sfr", "Fremont", "CA"]

На основании отчета о баг-баге, а также журналов показывает self.request.body, как и ожидалось.Как бы то ни было, загрузке simplejson это не нравится.

Пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

ДВА ОПЦИИ:

Похоже, вам нужно экранировать содержимое self.request.body.

Импортировать urllib и изменить последнюю строку кода в вашем примере на:

args = simplejson.loads(urllib.unquote(self.request.body))

Или вы можете попробовать этот другой вариант: вы отправляете полную строку json в теле POST.Вам может не понадобиться следующая строка в вашем javascript:

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

Извлеките ее и посмотрите, нужно ли вам использовать решение urllib.unquote выше.

0 голосов
/ 03 апреля 2012

Вы не отправляете контент в формате JSON.Вы должны добавить этот заголовок: contentType: 'application / json'

...