JS问题xhr.onload = function()

Me_Event_date.loadMapData=function(mapId){if(mapId>0){varfilename='Map%1.json'.format... 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;
这样就太迟了
展开
 我来答
吉他手_vai
2017-08-28 · TA获得超过223个赞
知道小有建树答主
回答量:331
采纳率:25%
帮助的人:346万
展开全部

我建议用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;

})

匿名用户
2017-08-28
展开全部
你是使用异步了吧,这个默认不写好像就是异步吧
xhr.open('GET', url);
要明确吧
xhr.open('GET', url, false);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式