Javascript 错误:未捕获的语法错误:JSON输入意外结束

Javascript 错误:未捕获的语法错误:JSON输入意外结束,javascript,json,django,ajax,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) {

下面是脚本

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
可能会出现

我得到以下错误

未捕获的语法错误: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'})
日志


问题在于,您在
xhr
请求的每个状态更改时都会触发函数。但并非每个状态更改都意味着已发送完整的响应

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

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


如果您阅读,您将看到建议收听的事件是
load
事件。

您需要检查浏览器的“网络”“开发人员”选项卡,查看服务器返回的内容。在解析
responseText
之前,请检查XMLHttpRequest的状态:这是文档中关于
responseText
的说明:返回一个
DOMString
,其中包含对请求的文本响应,如果请求失败,则返回
null
r尚未发送。因此它可能是
null
JSON.parse(“”;
将给出一个错误”(索引):1未捕获的语法错误:JSON.parse()在window.onload((索引):32)的JSON输入意外结束,所以它可能是一个空值。@Pointy从服务器上我得到
{“响应”:{“名称”:“请共享详细信息”,“电子邮件”:“请共享详细信息。”,“文本”:“请共享详细信息。”},“结果”:“错误”}
请参阅以了解
onreadystatechange
的解释。问题是,在发送xhr请求时,您会得到多个状态更改,您应该仅在达到“完成”状态时运行函数。