首页 > 解决方案 > 通过 JS 访问单个 SQLAlchemy 对象

问题描述

我正在尝试通过使用 on change 根据 select2 字段中的选择来更新我的大部分站点数据。我遵循了fetch用于创建包含从数据库中提取的信息的 JSON 文件的教程。虽然,这种情况略有不同,因为我试图访问一个对象以在我的 JS 中使用以更新某些站点 HTML。

我曾尝试使用fetch来返回该对象,但我发现它返回一个包含有关 URL 的随机数据的数组。

视图.py

@app.route('/selected_room/<int:room_id>')
def selected_room(room_id):
    room = Room.query.filter_by(id=room_id).first_or_404()

    return room

返回:

body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "OK"
type: "basic"
url: "http://127.0.0.1:5000/room/2"

我已经在上面发布了一些代码,但这里是我目前设置的所有内容。

视图.py

@app.route('/selected_room/<int:room_id>')
def selected_room(room_id):
    room = Room.query.filter_by(id=room_id).first_or_404()

    return room

js

$(document).ready(function(){
    $('#rooms').on('change', function() {
        var room_id = $(this).val();

        fetch('/room/' + room_id).then(function(data) {
            // this console.log is me testing to see what data returns
            console.log(room_id, data, data.room_id, data.room, data.rooms);
        });
    });
});

实际上,我正在寻找 .js 的 JS 替代品{{ object.id(etc) }}。要么我完全离开并且无法做到这一点,要么我只是走错了路。谢谢您的帮助!

标签: javascriptdatabasepostgresqlflask

解决方案


让我们系统地思考一下。

fetch记录在MDN中。您似乎使用正确的参数调用它:resource,它可以是一个 URL,并且没有init参数(这是可选的)。

它说fetch返回一个promise,并且promise 解析为一个Response对象。如果你不熟悉 Promise,你可以Promise从那里点击链接。如果你是,你就会知道data参数就是Response对象。

如果您点击链接查看Response对象是什么,您会看到它包含诸如headersokredirected等字段。这似乎与您在“返回:”标题下的问题中所写的内容相匹配。所以我假设您列出的返回值是data对象,如console.log.

所以问题是:给定一个Response(变量data),你如何提取响应的主体?在Response. 您可以使用data.body, data.arrayBuffer(), data.blob(), data.formData(),data.json()data.text(),这取决于它是什么类型的响应。我对Python或任何flask都不太了解,我不知道Room服务器端是什么,所以我不知道响应是什么样的。


推荐阅读