【问题标题】:Error: Uncaught SyntaxError: Unexpected end of JSON input错误:未捕获的 SyntaxError:JSON 输入意外结束
【发布时间】: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


【解决方案1】:

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

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

所以在其他状态下,您的函数将尝试解析一个空的responseText。此外,您可能在早期阶段已经拥有responseText

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

【讨论】:

    【解决方案2】:

    我变了

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

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

    它就像一个魅力!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2017-09-07
      • 2020-10-10
      • 2023-03-23
      • 2020-02-16
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多