javascript - IE浏览器的反应问题
问题描述
在 Vuex 存储库中,我每 10 秒从服务器接收一次数据:
从中我通过计算属性将数据拉入组件内部:
computed: {
trackingStatusId: function () {
return this.$store.state.tracking.trackingServerData.tracking_status_id;
},
},
接下来,我尝试在方法中使用这些数据:并且方法本身附加到 html block( <i class="state" :style="getIndicatorWidth()"></i>
)中的样式
methods: {
getIndicatorWidth: function () {
function widthCalculate(currentTrackingStatusId){
console.log(currentTrackingStatusId);
}
return widthCalculate(this.trackingStatusId);
},
},
现在我们注意上面代码中的这一行:
console.log(currentTrackingStatusId);
如果我从服务器获取更改的数据,则控制台日志中的值会在除 IE-11(及以下)之外的所有浏览器中响应更改。
从服务器获取数据如下:(挂在生命周期钩子上mounted ()
)
methods: {
getTrackerIntervalData () {
setInterval(()=>myTimer(this), 5000);
function myTimer(th) {
return axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=get_tracking_data&key_id=" + th.$route.params.tracking.toLowerCase() , {
})
.then(response => {
th.$store.commit('tracking/setTrackingServerData', response.data.data.tracking_data);
})
.catch(function (error) {
console.log(error);
});
}
},
}
Vuex 存储库:
常量 axios = 要求(“axios”);
export const state = () => ({
trackingServerData: null,
});
export const mutations = {
setTrackingServerData (state, trackingServerData) {
state.trackingServerData = trackingServerData;
},
};
我还复制了中间件的第一个请求,以便在渲染 DOM 树时能够处理数据:
导出默认函数 ({$axios, req, store, route}) {
if(req != undefined) {
store.commit('setIsFirstServerLoad', true);
}
else{
store.commit('setIsFirstServerLoad', false);
}
if(route.name == "language-tracker-tracking") {
return $axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=get_tracking_data&key_id=" + route.params.tracking.toLowerCase(), {})
.then(response => {
store.commit('tracking/setTrackingServerData', response.data.data.tracking_data);
})
.catch(function (error) {
console.log(error);
});
}
}
结果,如果你更深入地观察情况,事实证明 IE 浏览器正确计算的只是从中间件接收到的代码:
在上面的截图中,你可以观察到答案 8 - 是正确的 - 而答案 3 通常不清楚它来自哪里。(甚至可能来自存储库的最后一页——尽管我在那里有一个单独的存储库。我不知道为什么会发生这种情况。)
问:
为什么 IE 浏览器中的数据没有正确更新?
如何解决这个问题,或者是否有可能解决这个问题 - 以不同的方式实现一切?
解决方案
问题就在这里
getTrackerIntervalData () {
setInterval(()=>myTimer(this), 5000);
function myTimer(th) {
return axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=get_tracking_data&key_id=" + th.$route.params.tracking.toLowerCase() , {
})
.then(response => {
th.$store.commit('tracking/setTrackingServerData', response.data.data.tracking_data);
})
.catch(function (error) {
console.log(error);
});
}
}
IE dosent 支持箭头功能。 你应该这样做
getTrackerIntervalData () {
let vm=this;
setInterval(function(){myTimer(vm)}, 5000);
function myTimer(th) {
return axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=get_tracking_data&key_id=" + th.$route.params.tracking.toLowerCase() , {
})
.then(response => {
th.$store.commit('tracking/setTrackingServerData', response.data.data.tracking_data);
})
.catch(function (error) {
console.log(error);
});
}
}
因为 vue 使用 webpack。通常箭头函数将转换为普通函数以支持所有浏览器,但可能由于某种原因setInterval
箭头函数不转换。试试看可能是问题
推荐阅读
- jquery - 自定义数据属性的查询字符串
- java - gson 可以将空字符串反序列化为地图中的空值吗?
- jenkins-pipeline - 共享库的自定义步骤导致 java.lang.InterruptedException: sleep interrupted
- vue.js - 使用vuejs单击按钮时如何添加打开另一个组件
- python - 使用天气数据集将 json 转换为 pandas 数据帧
- ios - 使用 Web 应用程序进行 Apple 应用内购买?
- python - 预测相同答案的递归神经网络
- javascript - (Google Map API) 地理编码不成功,原因如下:REQUEST_DENIED
- html - 如何从一个元素应用悬停效果,该元素更改了 HTML 和 CSS 中的另一个元素
- reactjs - ReactJS 异步返回