You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qooxdoo应用连接SQLite数据库失败,求解决步骤及代码示例

解决qooxdoo通过Jsonp连接Bottle+SQLite的问题

问题定位

直接访问/getData接口正常,但qx.io.request.Jsonp请求后端无响应,核心原因是Jsonp请求要求后端返回带回调函数包裹的JSON数据,而当前后端仅返回纯JSON,同时前端可能未正确配置Jsonp的回调参数。

修正后的前端qooxdoo代码

// 初始化Jsonp请求实例
var jsonpReq = new qx.io.request.Jsonp();
// 设置完整的后端接口地址
jsonpReq.setUrl("http://address.es:8080/idCars/getData");
// 指定后端需读取的回调参数名(需与后端逻辑匹配)
jsonpReq.setCallbackParam("callback");

// 监听请求成功事件,处理返回数据
jsonpReq.addListener("success", function(e) {
    var rawData = e.getTarget().getResponse();
    console.log("获取到SQLite数据:", rawData);
    // 此处添加数据渲染、业务逻辑处理代码
}, this);

// 监听请求失败事件,排查错误
jsonpReq.addListener("failure", function(e) {
    console.error("请求失败,状态码:", e.getTarget().getStatusCode());
}, this);

// 发送请求
jsonpReq.send();

适配Jsonp的Bottle后端代码

from bottle import Bottle, request, response
import sqlite3
import json

app = Bottle()

@app.route('/idCars/getData')
def fetch_sqlite_data():
    # 连接SQLite数据库(确保文件路径正确)
    conn = sqlite3.connect('cars_db.db')
    conn.row_factory = sqlite3.Row  # 直接返回字典格式数据
    cursor = conn.cursor()
    
    # 执行SQL查询(示例:查询车辆表所有数据)
    cursor.execute("SELECT * FROM cars")
    data_rows = cursor.fetchall()
    
    # 转换为可序列化的字典列表
    result_list = [dict(row) for row in data_rows]
    conn.close()
    
    # 处理Jsonp回调逻辑
    callback_name = request.query.get('callback')
    if callback_name:
        # 返回带回调包裹的响应,Content-Type设为JS类型
        response.content_type = 'application/javascript'
        return f"{callback_name}({json.dumps(result_list)})"
    else:
        # 兼容普通JSON请求
        response.content_type = 'application/json'
        return json.dumps(result_list)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

关键解决步骤

  • 前端配置校验:确保Jsonp请求的callbackParam参数名与后端读取的参数完全一致,请求URL包含完整的域名、端口和接口路径。
  • 后端Jsonp适配:在接口中主动读取请求的callback参数,存在时返回回调函数(序列化数据)格式的响应,同时设置正确的Content-Type。
  • SQLite连接检查:确认数据库文件路径正确,运行后端的用户有文件读写权限,SQL查询语句无语法错误。
  • 跨域验证:Jsonp本身支持跨域请求,若仍有问题,检查后端是否存在额外的跨域拦截配置。

内容的提问来源于stack exchange,提问作者Jesús González

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:35:25