最近两天在测试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. @ServeletComponentScan和@ComponentScan的区别

    一.SpringBoot中使用Servlet在SpringBootApplication上使用@ServletComponentScan注解后,Servlet.Filter.Listener可以直接通 ...

  2. 算法习题---5.7丑数(Uva136)

    一:题目 丑数是指不能被除了2,,5以外的素数整除的数.将丑数从小到大排序 ,,,,,,,,,,,.... 求第1500个丑数 (一)求解方法 对于任意丑数x,他的2x,3x,5x都是丑数. 二:代码 ...

  3. composer autoload优化

    为生产环境作准备 最后提醒一下,在部署代码到生产环境的时候,别忘了优化一下自动加载: composer dump-autoload --optimize 安装包的时候可以同样使用--optimize- ...

  4. nnexus3 破解密码

    主要步骤如下: 1.停服 2.进入OrientDB控制台:java -jar /usr/local/nexus/lib/support/nexus-orient-console.jar 3.在控制台执 ...

  5. GitToc-为你的Github仓库的Readme自动生成一个目录

    维护自己的Github仓库的时候发现Github的Readme不支持Toc目录,所以就自己写了一个小工具. 工具地址:https://github.com/Holy-Shine/GitToc 简介 如 ...

  6. dockerui 安装

    meiya@meiya:~$ docker pull abh1nav/dockerui Using default tag: latest latest: Pulling from abh1nav/d ...

  7. Appium移动自动化测试-----(六)2.AppiumDesktop录制脚本生成极简脚本

    AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...

  8. jvm误区--动态对象年龄判定

    原文链接:https://blog.csdn.net/u014493323/article/details/82921740 虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThres ...

  9. 用pytorch1.0快速搭建简单的神经网络

    用pytorch1.0搭建简单的神经网络 import torch import torch.nn.functional as F # 包含激励函数 # 建立神经网络 # 先定义所有的层属性(__in ...

  10. @Scheduled注解各参数详解

    @Scheduled注解各参数详解 @Scheduled注解的使用可以参考这个:https://www.cnblogs.com/mengw/p/11564338.html 参数详解 1. cron 该 ...