Me_Event_date.loadMapData = function(mapId) {
if (mapId > 0) {
var filename = 'Map%1.json'.format(mapId.padZero(3));
this._mapLoader = ResourceHandler.createLoader('data/' + filename, this.loadDataFile.bind(this, 'me_events', filename));
}
};
Me_Event_date.loadDataFile = function(name, src) {
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
event_name = JSON.parse(xhr.responseText);
Me_Event_date.onLoad(event_name);
}
};
xhr.onerror = this._mapLoader || function() {
Me_Event_date._errorUrl = Me_Event_date._errorUrl || url;
};
xhr.send();
};
Me_Event_date.onLoad = function(object) {
$gameVariables._data[11] = object.events;
};
我想要$gameVariables._data[11] = object.events;这个数组。
Me_Event_date.loadMapData(1) 这样是可以让$gameVariables._data[11] = object.events;
不过问题不是马上得到。Me_Event_date.loadMapData(1)这条代码下面的内容都被执行了,之后才得到$gameVariables._data[11] = object.events;
这样就太迟了
JS问题xhr.onload = function()
答案:2 悬赏:0 手机版
解决时间 2021-02-26 17:16
- 提问者网友:战皆罪
- 2021-02-26 13:32
最佳答案
- 五星知识达人网友:想偏头吻你
- 2021-02-26 14:41
你是使用异步了吧,这个默认不写好像就是异步吧
xhr.open('GET', url);
要明确吧
xhr.open('GET', url, false);
xhr.open('GET', url);
要明确吧
xhr.open('GET', url, false);
全部回答
- 1楼网友:从此江山别
- 2021-02-26 15:23
我建议用promise改造下代码
Me_Event_date.loadDataFile = function(name, src) {
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
event_name = JSON.parse(xhr.responseText);
Me_Event_date.onLoad(event_name);
}
};
xhr.onerror = this._mapLoader || function() {
Me_Event_date._errorUrl = Me_Event_date._errorUrl || url;
};
xhr.send();
};
可以改成
Me_Event_date.loadDataFile = function(name, src ) {
return new Promise(function(resolve ,reject){
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400)
resolve(JSON.parse(xhr.responseText))
};
xhr.onerror = function(e){
reject(e)
}
xhr.send();
}).then(function(event_name){
Me_Event_date.onLoad(event_name);
}).catch(function(){
(this._mapLoader || function() {
Me_Event_date._errorUrl = Me_Event_date._errorUrl || url;
})();
})
};如果要使用只需要
this.loadDataFile.bind(this, 'me_events', filename).then(function(){
loadMapData(1)
$gameVariables._data[11] = object.events;
})
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯