【问题标题】:getting Unexpected token < in JSON at position 0 even when im returning json from flask backend即使当我从烧瓶后端返回 json
【发布时间】:2020-10-31 06:03:09
【问题描述】:

我正在从this article 学习如何使用烧瓶作为 React 应用程序的后端,我的烧瓶后端只有一个路由,它以 JSON 格式返回当前时间。获取时到我的反应应用程序,但我的开发控制台说 - Unexpected token &lt; in JSON at position 0.

我对此进行了一些研究,结果发现当您不返回 json 时会发生这种情况。但据我所知烧瓶自动jsonifyies dicts。所以请解释我哪里出错了。

这是我的反应代码(仅相关部分,我没有包括 jsx,因为它会使这变得不必要地长)-

    async function get_data() {
        try {
            const res = await fetch("/hola");
            const data = await res.json();
            console.log(data);
        } catch (err) {
            console.log("error : " + err);
        }
    }
    function onSubmit(event) {
        event.preventDefault();
        const stuff = get_data();
        console.log(stuff);
    }

所以我基本上在网页上按下了一个提交按钮,这应该会从我的烧瓶中获取数据并将其登录到控制台。

这是我的烧瓶代码 -

from flask import Flask
import time

app = Flask(__name__)


@app.route('/hola')
def home():
    return {'time': time.time()}

感谢任何帮助,提前致谢

【问题讨论】:

    标签: python json reactjs flask fetch


    【解决方案1】:

    您收到错误 Unexpected token &lt; in JSON at position 0,因为您的路由几乎肯定会返回 HTML 错误代码 500 和相应的 html 消息,因此消息以 &lt; 开头,如下所示:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    <title>500 Internal Server Error</title>
    <h1>Internal Server Error</h1>
    <p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
    

    在 Chrome 浏览器中查看附加的错误截图:

    尝试将您的hola 路由改写如下,看看引发了什么异常:

    @app.route('/hola')
    def home():
        try:
            return {'time': time.time()}
        except Exception as ex:
            print(str(ex))
            return {'time': None}
    

    我怀疑您的脚本中某处还有另一个名为 time 的变量,它没有函数 time()。例如,这是导致错误的一种方式:

    @app.route('/hola')
    def time():
        try:
            return {'time': time.time()}
        except Exception as ex:
            print(str(ex))
            return {'time': None}
    

    注意我愚蠢地调用了我的路由函数time。这是异常输出:

    Connected to pydev debugger (build 201.7846.77)
     * Serving Flask app "app.py"
     * Environment: development
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [01/Nov/2020 12:50:00] "GET / HTTP/1.1" 200 - 'function' object has no attribute 'time'
    127.0.0.1 - - [01/Nov/2020 12:50:00] "GET /hola HTTP/1.1" 200 -
    

    这是浏览器中的响应:

    【讨论】:

      【解决方案2】:

      您需要在返回之前对字典进行 jsonify 处理

      试试

      from flask import jsonify
      
      @app.route('/hola')
      def home():
          return jsonify({'time': time.time()})
      

      【讨论】:

      • 嘿,谢谢,但这似乎不起作用。我遇到了同样的错误
      【解决方案3】:

      我知道这个问题的原因,我也遇到过这个问题,但是在 jquery 中。原因是来自后端的数据类型是脚本,但作为响应,它需要 JSON 数据。当您获取或更新数据时,您必须使用 JSON.stringify(data)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-22
        • 2019-05-06
        • 2018-09-10
        • 2021-07-11
        • 1970-01-01
        相关资源
        最近更新 更多