最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的是异步方式(调整async:false没起到作用,不太清楚oDataModel是否存在同步机制),后来采用jQuery.ajax进行调用,此过程中token问题查询了很多资料(最终通过官网标准文档解决),现将测试过程及相关问题做下备注:

UI5-技术篇-Expand与Deep 服务测试

1.oDataModel方式调用

oDataModel API文档:https://sapui5.hana.ondemand.com/#/api/sap.ui.model.odata.v2.ODataModel

 oDataModel封装方法与HTTP请求方式的对应关系:

  • read -> get
  • create -> post
  • update -> put
  • remove -> delete

 GET_EXPANDED_ENTITYSET对应的oDataModel请求方式:

 var oModel = new sap.ui.model.json.JSONModel();

 this.cModel.read("/ZRICO_USRSet",{
async:false,
urlParameters:{
"$filter":"Usrid eq '" + this.inpusr + "'", //过滤条件
"$expand":"HeaderToItem"            //expand参数
},
success:function(oData,oResponse){
oModel.setData(oResponse.data.results[0]);
},
error:function(oError){
//
}
});

 CREATE_DEEP_ENTITY对应的oDataModel请求方式:

 this.saveModel = this.getOwnerComponent().getModel("ZRICO_DEEP_USR");
this.saveData = {
Usrid:this.getView().byId("inp_usrid").getValue(),
Usrname:this.getView().byId("inp_usrname").getValue(),
Usraddr:this.getView().byId("inp_usraddr").getValue(),
HeaderToItem:this.getView().byId("usrTable").getModel().getData().HeaderToItem.results
}; this.saveModel.create("/ZRICO_USRSet",this.saveData,{
async:false,
success:function(oData,oResponse){
this.oModeldeep.setData(oData);
},
error:function(oError){
return oError;
}
});

 以上调用过程中都设置了async:false(即同步参数),但是执行过程中没起作用,具体如何设置需进一步查阅资料。

2.JQuery.AJAX方式调用

 采用jQuery.ajax方式请求数据,目前出现最多的问题应该是token验证问题了,在SAP论坛及博客空间查阅了一整天,讨论token问题的帖子很多,但是没找到一个实际有效的方法,最后直接查阅了官方标准文档(https://help.sap.com/viewer/b3d0daf2a98e49ada00bf31b7ca7a42e/2.0.04/en-US/e8a6bc904c0c48a182288604f467e84a.html?q=x-csrf-token)解决该问题。

 JQuery.ajax具体调用过程如下: 

 onBTSave: function(oEvent) {
//This code was generated by the layout editor.
//设置oDataModel
this.saveModel = this.getOwnerComponent().getModel("ZRICO_DEEP_USR");
//c
this.saveData = {
Usrid:this.getView().byId("inp_usrid").getValue(),
Usrname:this.getView().byId("inp_usrname").getValue(),
Usraddr:this.getView().byId("inp_usraddr").getValue(),
HeaderToItem:this.getView().byId("usrTable").getModel().getData().HeaderToItem.results
}; this.oModeldeep = this.onBTSaveModel(this.saveData);
this.getView().setModel(this.oModeldeep);
this.oTable.setModel(this.oModeldeep);
}, onBTSaveModel: function(fv_data) {
var oModel = new sap.ui.model.json.JSONModel();
var sUrl = this.getOwnerComponent().getModel("ZRICO_DEEP_USR").sServiceUrl + "/ZRICO_USRSet";
//var token = this.getOwnerComponent().getModel("ZRICO_DEEP_USR").getSecurityToken();
  
jQuery.ajax({
url: this.getOwnerComponent().getModel("ZRICO_DEEP_USR").sServiceUrl,
type: "GET",
async: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRF-Token", "Fetch");           //获取token
},
success: function(data, textStatus, XMLHttpRequest) {
var token = XMLHttpRequest.getResponseHeader('X-CSRF-Token');  //取值token
jQuery.ajax({
url: sUrl,
type: "POST",
async: false,
contentType: "application/json",
dataType: "json",
data: JSON.stringify(fv_data),                   //注意JSON格式转换
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRF-Token", token);        //赋值token
},
success: function(response, stextStatus, jqXHR) {
oModel.setData(response.d);
},
error: function(xhr, etextStatus, error) {
oModel.state = "";
oModel.errorMessage = xhr ? xhr.status + " - " + xhr.statusText : textStatus;
oModel.errorStack = error && error.stack;
}
});
}
});
return oModel;
}
});

 错误:解析 XML 流时出错:'value expected at 'Usrid=1&Us''。   主要是JSON格式未转换造成的 JSON.stringify(),如上代码所示。

3.执行过程测试

 

 

 

UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题的更多相关文章

  1. JQuery Ajax执行过程AOP拦截

    JQuery Ajax过程AOP:用于在Ajax请求发送过程中执行必备操作,比如加载数据访问令牌. $.ajaxSetup({ type: "POST", error: funct ...

  2. [JQuery] Ajax使用过程中的问题总结

    JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: $.ajax({ url: ...

  3. 统一处理jquery ajax请求过程中的异常错误信息的机制

    当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编 ...

  4. Ajax请求过程中显示“进度”的简单实现

    Ajax在Web应用中使用得越来越频繁.在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,同时阻止用户操作本页面(比如Ajax请求通过某个按钮触发,用户不能频繁点击 ...

  5. SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误

       今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误:         消息1222,级别16,状态18,第1 行         已超过了锁请求超时时段.        ...

  6. jQuery实现动画过程中尽量避免出现网页滚动条

    jQuery实现动画过程中尽量避免出现网页滚动条,不然可能会出现动画效果异常.

  7. Deepin下phpunit安装,以及执行过程中所遇到的问题

    Deepin下phpunit安装,以及执行过程中所遇到的问题 安装phpunit步骤 wget https://phar.phpunit.de/phpunit.phar chmod +x phpuni ...

  8. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法   JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...

  9. 【已解决】Makefile执行过程中出错:make: *** No rule to make target ` ‘, needed by xxx. Stop(转载)

    转自: http://www.crifan.com/makefile_error_make_no_rule_to_make_target_needed_by_stop/ [问题] 有个已有的Makef ...

随机推荐

  1. ROS tf基础使用知识

    博客参考:https://www.ncnynl.com/archives/201702/1306.html ROS与C++入门教程-tf-坐标变换 说明: 介绍在c++实现TF的坐标变换 概念: Co ...

  2. 001-guava概述

    一.概述 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives supp ...

  3. j2s7s300 refers to jaco v2 7DOF spherical 3fingers

    <?xml version="1.0"?> <!-- j2s7s300 refers to jaco v2 7DOF spherical 3fingers --& ...

  4. Spring cloud微服务安全实战-4-10Zuul网关安全开发(三)

    首先把地址给它 发送post请求,请求的数据就是这个entity对象. 最后返回的值要封装到TokenInfo里面 如果一切正常的话就会拿到一个响应的实体,实体里面就包含了TokenInfo 打印实体 ...

  5. 全面系统Python3入门+进阶-1-1 导学

    python特点 结束

  6. 【插件】thinkphp5+百度编辑器自定义上传

    1 官方下载sdk 2 在引入编辑器页面.写入js // 百度编辑器 UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActi ...

  7. RabbitMQ 清除全部队列及消息

    前言 安装RabbitMQ后可访问:http://{rabbitmq安装IP}:15672使用(默认的是帐号guest,密码guest.此账号只能在安装RabbitMQ的机器上登录,无法远程访问登录. ...

  8. 【442】Remote control GUP Linux

          参考:上传文件到GPU服务器并运行文件 参考:WinSCP 参考:Python远程调试图文教程(一)之Pycharm Remote Debug 参考:教程 | 使用 PyCharm 连接服 ...

  9. Python - Django - Cookie 简单用法

    home.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. Python爬虫-爬取豆瓣图书Top250

    豆瓣网站很人性化,对于新手爬虫比较友好,没有如果调低爬取频率,不用担心会被封 IP.但也不要太频繁爬取. 涉及知识点:requests.html.xpath.csv 一.准备工作 需要安装reques ...