错误:语法未正确错误:JSON输入意外结束

时间:2019-09-05 15:57:00

标签: javascript json django ajax

有以下脚本。

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'})

日志

enter image description here

2 个答案:

答案 0 :(得分:2)

问题是您在xhr请求的每次状态更改时都触发了功能。但是,并非每个状态更改都意味着已发送完整的响应。

Here是状态更改列表。如您所见,只有DONE状态与解析响应有关。

因此,在其他状态下,您的函数将尝试解析空的responseText。另外,您可能在更早的阶段就已经有了responseText

如果您阅读the instructions,将会看到推荐的倾听事件是load事件。

答案 1 :(得分:0)

我变了

res.status(204).json({ user });

res.status(200).json({ user });

它的作用就像一个魅力!