this.onHookSuccess = function (eventsData, result, api) { // 异步函数
console.log(window.matQty,'起点')
if (api === "getMatAndGrid"){
let dataDestination = eventsData.request.dataDestination;
result.data.data = result.data.data&&result.data.data.length>0?result.data.data[0]:result.data.data;
result.data.data.matStr1 = result.data.data.matStr1 === "0" ? "小件" : "大件";
if(window.matCode){
if(window.matCode === result.data.data.matCode){
result.data.data.matQty = window.matQty+ window.matQty
console.log(window.matQty,'赋值')
}
}else{
result.data.data.matQty = window.matQty
}
window.matCode = result.data.data.matCode
this.setComponentData(dataDestination,result)
console.log(window.localStorage)
}
};
this["interceptParam"] = function (param, element, eventsData) {
if (eventsData.request.api === "getMatAndGrid"&&element.propsValue.refName === "#matCode"){
let barCode = param.matCode;
let boardQty = 0;
if (barCode.search("MADE IN JAPAN")>-1&&barCode.length >= 61){
param.matCode = barCode.substring(50,61).trim();
boardQty = parseInt(barCode.substring(24,30));
window.matQty = boardQty
}else if (barCode.length >= 19){
let projCount = parseInt(barCode.substring(16,19));
let dnStart = 19+projCount*5+27;
let dnEnd = dnStart + 15;
if (barCode.length >= dnEnd){
param.matCode = barCode.substring(dnStart,dnEnd).trim();
boardQty = parseInt(barCode.substring(dnEnd,dnEnd+7));
window.matQty = boardQty
}else {
this.$store.dispatch("showMassage", {
type: "error",
message: "条码格式不正确",
});
throw "unrecognizable barcode content";
}
}else {
this.$store.dispatch("showMassage", {
type: "error",
message: "条码格式不正确",
});
throw "unrecognizable barcode content";
}
} else if (eventsData.request.api === "updateOutManualPTL"){
}
return param;
}
代码如上图 看有打印的地方就行
this.onHookSuccess 是一个异步请求的回调函数,我在里面用windows 对象给一个变量
window.matQty 赋值 如果名字相同则会累加,但是在执行第二次函数后出现了 变量依然是上次 就是12的情况
问题是我打印赋值和起点的地方 一个赋值明明已经改变为24,但是第二次执行起点处却还是12。 这个变量是用全局的 window.matQty 装的,
正常第二次起点处应该是24。 求问用什么方法可以实现异步函数中装变量。第二次调用正常拿到的。 或者能拿到异步函数的变量
ajax回调函数内部无法修改外部变量。
如:前端发送ajax请求给后台需要查询该用户是否有审核权限,因此需要定义一个全局变量,将后台查询结果赋值给这个变量,在进行审核的时候对该变量进行判断,如果有审核权限,则允许该用户进行后续操作。
但是在ajax回调函数内部无法修改外部变量,此时需要将ajax请求由异步请求改为同步请求,才会对全局变量赋值成功。
$.ajaxSetup({
async: false
});
$.post('/interface/execute/sql', {
sqlId: '35334',
sqlType: '2',
sqlParamJson: JSON.stringify({
staffId:session.staff.staffId
})
}, function (retList) {
retList = JSON.parse(retList);
if(retList.length>0){
isRole=true;
}
});
$.ajaxSetup({
async: true
});
问题解决了吗
localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。
localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。
localStorage 属性是只读的。
提示: 如果你只想将数据保存在当前会话中,可以使用 sessionStorage 属性, 该数据对象临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。