oData.read()方法触发未捕获的错误

时间:2016-05-10 07:41:14

标签: javascript odata sapui5

我正在使用SAP UI5,并且正在尝试从公共odata service获取一些数据。

我在以下代码段中进行了调用。

matched:function(oEvent){
if(!sap.ui.getCore().getModel("emp"))
    {
    var url = this.getOwnerComponent().getMetadata().getConfig().service.url
    console.log("url")
    console.log(url)
    var oData = new sap.ui.model.odata.ODataModel(url,true)

    oData.read("/People?top=5",{
        async:true,
        success:function(oData,response){
        var eModel = new sap.ui.model.json.JSONModel();
        eModel.setData(oData);
        sap.ui.getCore().setModel("emp", eModel)

    }

我已经在Component.js中配置了服务URL,就像这样..

        config : {
        resourceBundle : "i18n/messageBundle.properties",
        service:{
            url:"http://services.odata.org/V4/TripPinServiceRW"
        }

一旦调用了oData.read()方法,就会从资源文件夹中的js文件中抛出未被捕获的错误。

Error log

我检查了浏览器中的网络选项卡,每次调用oData.read()时我都会看到4个调用 1。http://services.odata.org/V4/(S(d1goo34fnpbdpleuuykeha2r))/TripPinServiceRW/ $元数据
2。http://services.odata.org/V4/(S(pgzb5mtb0yp5ytw25xrdfcxl))/TripPinServiceRW/ $元数据
3。http://services.odata.org/V4/TripPinServiceRW/People?top=5
4。http://services.odata.org/V4/(S(zobeyavqtqtykfyyj1m4jqrt))/TripPinServiceRW/People?top=5

除了第三个所有其他人返回状态200,第三个返回状态302。

最后一个请求会返回数据,但查询不起作用,而不是前5个所有记录都被提取。

我想知道我做错了什么,感谢任何帮助.TIA。

仅供参考,UI5的版本为1.34.9

我也使用邮递员测试了公共服务,它工作正常。

1 个答案:

答案 0 :(得分:0)

  1. 对于评论中提到的OData版本不匹配:您可以尝试包含请求标头OData-MaxVersion。如果该服务可以提供符合该版本的响应,那么它将会。
  2. top无法正常工作:请注意,根据OData Spec V2,查询选项的名称为$top,而不只是top
  3. 所以试试吧:

    var oData = new sap.ui.model.odata.ODataModel(url,true)
    oData.setHeaders({
      "OData-MaxVersion": "2.0"
    });
    
    oData.read("/People?$top=5", {
       async:true,
       success:function(oData,response) {
          // ...
       }
     }