【发布时间】:2020-01-08 13:46:35
【问题描述】:
有以下脚本。
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'})
日志
【问题讨论】:
-
您需要检查浏览器的“网络”开发人员选项卡并查看服务器返回的内容。
-
在解析
responseText之前检查您的 XMLHttpRequest 的状态:这就是文档所说的responseText:返回一个DOMString,其中包含对请求的响应作为文本,或 @987654334 @如果请求不成功或尚未发送。所以它可能是null。 -
JSON.parse("");将给出错误“(index):1 Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse () at window.onload ((index):32)”所以它可能是一个空值。 -
来自服务器的@Pointy 我得到
{"response": {"name": "Share details, please.", "email": "Share details, please.", "text": "Share details, please."}, "result": "error"} -
请参阅this 了解
onreadystatechange的解释。问题是您在发送 xhr 请求时会发生多个状态更改,并且您应该只在达到 DONE 状态时运行您的函数。
标签: javascript json django ajax