如何将SAP UI5 Model响应与绑定后的处理函数关联以获取响应头
解决UI5中bind绑定success回调后获取响应头的问题
你遇到的核心问题是回调函数的参数签名不对,以及对bind的作用理解偏差:bind仅用于绑定函数的this上下文,不会阻断原回调的参数传递。
正确的实现步骤:
- 修正
_onSuccess的参数签名
UI5的ODataModel.create方法的success回调默认会传入两个参数:
- 第一个参数:后端返回的数据(
data) - 第二个参数:包含响应头的完整响应对象(
response,其中response.headers就是你需要的头部参数)
所以要把_onSuccess改成接收两个参数:
_onSuccess: function(data, response) { // 获取响应头 const responseHeaders = response.headers; // 这里处理并展示头部参数,比如打印或弹窗 console.log("后端返回的响应头:", responseHeaders); // 显示成功提示 sap.m.MessageToast.show("创建成功,响应头已获取"); }
- 正常使用
bind绑定上下文
不需要额外传递参数,bind(this)只是确保_onSuccess里的this指向当前控制器/组件,原回调的data和response会自动传入:
var oModel = this.getModel('action'); oModel.create(path, body, { success: this._onSuccess.bind(this), error: this._onError.bind(this) });
为什么之前拿不到响应头?
你原来的_onSuccess只定义了一个参数response,但这个参数实际是后端返回的数据对象,而非包含头信息的响应对象,所以自然找不到headers属性。
扩展:如果需要传递自定义参数
如果要在回调里加入自定义参数,可以通过bind前置传递,此时参数顺序会变成:自定义参数 → 原回调参数:
// 绑定自定义参数 success: this._onSuccess.bind(this, "自定义标识", 123) // 对应的_onSuccess _onSuccess: function(customFlag, customId, data, response) { console.log("自定义参数:", customFlag, customId); console.log("响应头:", response.headers); }
内容的提问来源于stack exchange,提问作者Badhusha
相关产品推荐
相关产品推荐

