【发布时间】:2017-04-02 15:48:56
【问题描述】:
我正在尝试使用JQuery.post() 发送一条简单的消息,但它在 Python 上给出了这个错误:
cadastro/editPessoa/ 处的 JSONDecodeError
预期值:第 1 行第 1 列(字符 0)
Javascript(简体):
data = { "pessoa" : [ ["1","joão","321","camarão"] ] }
$.post('editPessoa/', data, function(response) {
updatePessoas();
}, 'json');
views.py:
@csrf_exempt
def editPessoa(request):
data = json.loads(request.body.decode('utf-8'))
print(data)
return HttpResponse('Done!')
尝试 json.loads() 时出现错误,如果我删除 .decode() 错误发生在 print() 上,它会引发无法打印字节
追溯:
JSONDecodeError at /cadastro/editPessoa/
Expecting value: line 1 column 1 (char 0)
Request Method: POST
Request URL: http://localhost:8000/cadastro/editPessoa/
Django Version: 1.10.3
Python Executable: C:\Users\6036794\Documents\django\djangocadastro\py35\Scripts\python.exe
Python Version: 3.5.2
Python Path: ['c:\\Users\\6036794\\Documents\\django\\djangocadastro', 'C:\\Python27', 'C:\\Users\\6036794
\\Documents\\django\\djangocadastro\\py35\\Scripts\\python35.zip', 'C:\\Python35\\DLLs', 'C:\\Python35
\\lib', 'C:\\Python35', 'C:\\Users\\6036794\\Documents\\django\\djangocadastro\\py35', 'C:\\Users\\6036794
\\Documents\\django\\djangocadastro\\py35\\lib\\site-packages']
Server time: Sex, 18 Nov 2016 15:33:35 -0200
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cadastroapp']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Python35\lib\json\decoder.py" in raw_decode
355. obj, end = self.scan_once(s, idx)
During handling of the above exception (0), another exception occurred:
File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\exception
.py" in inner
39. response = get_response(request)
File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\base
.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\base
.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\views\decorators
\csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "c:\Users\6036794\Documents\django\djangocadastro\cadastroapp\views.py" in editPessoa
19. data = json.loads(request.body.decode('utf-8'))
File "C:\Python35\lib\json\__init__.py" in loads
319. return _default_decoder.decode(s)
File "C:\Python35\lib\json\decoder.py" in decode
339. obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python35\lib\json\decoder.py" in raw_decode
357. raise JSONDecodeError("Expecting value", s, err.value) from None
Exception Type: JSONDecodeError at /cadastro/editPessoa/
Exception Value: Expecting value: line 1 column 1 (char 0)
Request information:
USER: 6036794
GET: No GET data
POST:
pessoa[0][] = 'Camarão'
FILES: No FILES data
【问题讨论】:
-
错误发生在
print?真的吗?这似乎很奇怪。我本来希望错误出现在json.loads()函数上。请发布整个错误回溯。 -
@JohnGordon 抱歉,我把情况弄糊涂了,已修复
-
如果你想让你的jQuery post方法发送json,我认为你必须自己做一些工作才能将它转换成json;它不会因为您使用
'json'作为最后一个参数而自动执行。 -
@JohnGordon 我也是这么想的,但这不是这里的例子所说的:api.jquery.com/jquery.post
-
@Mojimi 你确定吗?该参数的描述是“服务器预期的数据类型”,即它用于处理服务器的响应在您的数据发布之后。
标签: javascript jquery python json django