UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题
最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的是异步方式(调整async:false没起到作用,不太清楚oDataModel是否存在同步机制),后来采用jQuery.ajax进行调用,此过程中token问题查询了很多资料(最终通过官网标准文档解决),现将测试过程及相关问题做下备注:
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格式传值问题的更多相关文章
- JQuery Ajax执行过程AOP拦截
JQuery Ajax过程AOP:用于在Ajax请求发送过程中执行必备操作,比如加载数据访问令牌. $.ajaxSetup({ type: "POST", error: funct ...
- [JQuery] Ajax使用过程中的问题总结
JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: $.ajax({ url: ...
- 统一处理jquery ajax请求过程中的异常错误信息的机制
当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编 ...
- Ajax请求过程中显示“进度”的简单实现
Ajax在Web应用中使用得越来越频繁.在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,同时阻止用户操作本页面(比如Ajax请求通过某个按钮触发,用户不能频繁点击 ...
- SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误
今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误: 消息1222,级别16,状态18,第1 行 已超过了锁请求超时时段. ...
- jQuery实现动画过程中尽量避免出现网页滚动条
jQuery实现动画过程中尽量避免出现网页滚动条,不然可能会出现动画效果异常.
- Deepin下phpunit安装,以及执行过程中所遇到的问题
Deepin下phpunit安装,以及执行过程中所遇到的问题 安装phpunit步骤 wget https://phar.phpunit.de/phpunit.phar chmod +x phpuni ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
- 【已解决】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 ...
随机推荐
- Python3基础 def 函数要先定义再调用
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- C++数据存储方式
1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区,里面的变量通常是局部变量.函数参数等. 2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去 ...
- Game and Application Protocol
This privacy policy details the information collected by the team ("we" or "our" ...
- 戒邪淫利器:《楞严经 四种清净明诲》实例及原经文 (转自学佛网:http://www.xuefo.net/nr/article55/545256.html)
今日得持首楞严,不读天下糟粕书! 当你读完楞严经后就会很真实的升起这个感觉!根本觉得其他书都是多余的!所以<楞严经>还是要多读,多看!并且<楞严经>戒淫的效果特别好!好好的珍惜 ...
- 【Leetcode_easy】977. Squares of a Sorted Array
problem 977. Squares of a Sorted Array solution: class Solution { public: vector<int> sortedSq ...
- shell每隔一秒钟就记录下netstat状态
说明 木马可能类似随机发送心跳包的操作,随机sleep.对这类情况写好了一个监听shell脚本,每隔一秒钟就记录下netstat状态. 代码 #!/bin/bash #功能:用于定时执行lsof 和 ...
- iOS 多线程的简单理解(1) 方式 :同步 异步
最近遇到特别糟糕的面试,过程中提到多次对多线程的处理问题,并没有很好的给予答复和解决,所以在这里做个简单的备案: 期望能更加了解和熟练使用 多线程技术: 下面都是自己的总结,如果存在不对的,或者不足, ...
- [BJOI2019] 删数 [dp转贪心结论+线段树]
题面 传送门 思路 dp部分 以下称合法序列为原题面中可以删空的序列 这个是我在模拟考场上的思路 一开始我是觉得,这个首先可以写成一个dp的形式:$dp[i][j]$表示用$j$个数字填满了目标序列的 ...
- PHP使用glob方法遍历文件夹下所有文件
PHP使用glob方法遍历文件夹下所有文件 遍历文件夹下所有文件,一般可以使用opendir 与 readdir 方法来遍历.<pre><?php$path = dirname(__ ...
- YCOJ过河卒C++
过河卒是一道~~较简单 的问题,用递归或者动态规划都可以完成,但今天主要不是递归或者动态规划,而是用深度优先搜索做的.虽然会有两组TLE~~ 深搜是一种向下搜索的算法(如图所示) 它能有效的统计中点到 ...