最近两天在测试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 ...
随机推荐
-
NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版
nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序. ...
-
Mongo使用脚本更新数据
SQL Server中我们经常要使用脚本来刷一些数据,在mongo中我们也可以使用mongo的脚本来刷mongo的数据 首先在命令窗口中链接到本地的mongo库 load("[脚本的地址]& ...
-
C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类
StrBlob是一个管理string的类,借助标准库容器vector,以及动态内存管理类shared_ptr,我们将vector保存在动态内存里,这样就能在多个对象之间共享内存. 定义StrBlob类 ...
-
php 环境变量收集
常用的PHP环境变量和系统常量列表 是一个包含服务器端相关信息的PHP全局环境变量,在PHP4.1.0之前的版本使用$HTTP_SERVER_VARS.更多信息可以参考这里. $_SERVER['PH ...
-
Asp.net禁用页面缓存的方法
方法1.在Asp页面首部<head>中添加如下代码 Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response ...
-
让Cocos2dx中的TestCPP中的Box2dTest运行起来
一般而言,如果你导入TestCPP到VS2012中去后,会编译十几分钟才会出现窗口界面,这是包含Cocos2dx所有功能的一个demo,功能非常齐全强大,里面有两个关于Box2d的测试案例,一个是Bo ...
-
Struts2开山篇【引入Struts、自定义MyStruts框架】
前言 这是Strtus的开山篇,主要是引入struts框架-为什么要引入struts,引入struts的好处是什么-. 为什么要引入struts? 首先,在讲解struts之前,我们来看看我们以前写的 ...
-
Shell排序(改良的插入排序)
Shell排序算法最初是由D.L Shell于1959年提出,假设要排序的元素有n个,则每个进行插入排序是并不是所偶的元素同时进行,而是去一段间隔. Shell首先将间隔设定为n/2,然后跳跃的进行插 ...
-
List集合remove元素的问题
import java.util.*; public class object { public static void main(String[] args) { String str1 = new ...
-
leecode第二十一题(合并两个有序链表)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...