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请求时,您会得到多个状态更改,您应该仅在达到“完成”状态时运行函数。