有以下脚本。
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (JSON.parse(ajax.responseText).result == 'error') {
console.log('error')
$.each(JSON.parse(ajax.responseText).response, function(key, value) {
console.log(key)
$('.contact_form_' + key).css('display', 'block')
$('.contact_form_' + key).prev().css("border", '1px solid #FD7900')
$('.contact_form_' + key).text(value)
})
} else {
location.reload();
}
}
它旨在向服务器发出ajax
请求。作为响应,我从服务器传递了json
和数据。空的json
可能会出现。
我收到以下错误消息。
未捕获的SyntaxError:JSON输入意外结束
在此行发誓-if (JSON.parse (ajax.responseText) .result == 'error') {
Json
可能的例子
if contact_form.is_valid():
contact_form = contact_form.save()
return JsonResponse({})
else:
response = {}
for k in contact_form.errors:
response[k] = contact_form.errors[k][0]
return JsonResponse({"response": response, 'result': 'error'})
日志
答案 0 :(得分:2)
问题是您在xhr
请求的每次状态更改时都触发了功能。但是,并非每个状态更改都意味着已发送完整的响应。
Here是状态更改列表。如您所见,只有DONE
状态与解析响应有关。
因此,在其他状态下,您的函数将尝试解析空的responseText
。另外,您可能在更早的阶段就已经有了responseText
。
如果您阅读the instructions,将会看到推荐的倾听事件是load
事件。
答案 1 :(得分:0)
我变了
res.status(204).json({ user });
到
res.status(200).json({ user });
它的作用就像一个魅力!