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

调用REST API获取数据并设置为SAPUI5模型的实现方法咨询

解决方案

你当前的代码存在两个核心问题:

  • JSONModel 构造函数仅支持直接传入静态数据对象,无法识别 Fetch 异步请求返回的 Promise 实例
  • 你在请求回调中仅打印了返回结果,没有将解析后的数据写入模型

修正后代码

onInit: function() {
    var myHeaders = new Headers();
    // 替换为你自己的API Key
    myHeaders.append("x-rapidapi-key", "XxXxXxXxXxXxXxXxXxXxXxXx");

    var requestOptions = {
        method: 'GET',
        headers: myHeaders,
        redirect: 'follow'
    };        
    
    // 先实例化空的JSON模型并绑定到视图
    var bBallModel = new JSONModel();
    this.getView().setModel(bBallModel, "bball");
    
    // 发起异步请求
    fetch("https://api-basketball.p.rapidapi.com/countries", requestOptions)
    .then(response => response.json()) // 直接解析为JSON对象,不要用text()
    .then(result =>  {
        console.log(result);
        // 将接口返回的完整数据写入模型
        bBallModel.setData(result);
    })
    .catch(error => console.log('请求错误', error));
}

XML视图绑定示例

接口返回的国家列表存放在response字段中,你可以直接通过模型路径绑定到列表控件:

<List
    items="{bball>/response}"
    headerText="可选国家"
>
    <StandardListItem
        title="{bball>name}"
        icon="{bball>flag}"
        description="国家代码:{bball>code}"
    />
</List>

注意事项

  • 请确认你的控制器/组件顶部已经引入了sap/ui/model/json/JSONModel依赖,否则会出现类未定义错误
  • 如果你确实是将这段逻辑写在Component.js中,请不要调用this.getView(),直接使用this.setModel(bBallModel, "bball")即可将模型设为全局组件模型,应用内所有视图都可以访问
  • 可在请求发起前添加加载提示、请求结束后关闭提示,优化用户体验

内容的提问来源于stack exchange,提问作者aharr22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:09:02