基本上我正在做的是检查对象是否存在,如果找不到,脚本将尝试使用getScript加载源文件。我只想检查一次,然后返回true或false给调用fetch()
的函数 fetch:function(obj){
...
isReady = false;
$.getScript(obj.srcFile,function(){
isReady=true;
warn("was able to load object "+key);
});
return isReady;
}
但在脚本加载= /
之前返回稍后加载脚本但函数返回false。
这是异步之美我想......
处理此问题的最佳方法是......如果对象存在,我可以在其他某点再次检查吗?
或许有更好的方法可以做到这一点,我没有可能锁定浏览器?
答案 0 :(得分:1)
从组织代码我猜你正在使用一个对象来包含你的方法。如果是这样,那么你可以使用这样的自定义事件:
var thing = {
fetch: function(obj){
var self = this;
if (obj.isReady){
self.trigger('ready', [obj]);
return;
}
$.getScript(obj.srcFile,function(){
obj.isReady = true;
self.trigger('ready', [obj]);
});
}
};
thing.bind('ready',function(e, obj){
// do what you need to do when the object exists here
});
var obj = {};
thing.fetch(obj);
答案 1 :(得分:0)
请参阅jQuery.ajax():将async
设为false。
默认情况下,所有请求都是异步发送的(默认设置为true)。如果需要同步请求,请将此选项设置为false。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。
答案 2 :(得分:0)
fetch:function(obj){
isReady = false;
$.getScript(obj.srcFile,function(script_data){
isReady=true;
warn("was able to load object "+key);
if ( typeof( script_data ) != 'undefined' ) {
return isReady;
}
});
}
你需要在回调函数中返回值,否则它将启动请求然后立即返回。