在继续之前,如何让脚本等待Ajax get请求的状态?

时间:2010-03-12 09:19:41

标签: jquery ajax wait getscript

基本上我正在做的是检查对象是否存在,如果找不到,脚本将尝试使用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。

这是异步之美我想......

处理此问题的最佳方法是......如果对象存在,我可以在其他某点再次检查吗?

或许有更好的方法可以做到这一点,我没有可能锁定浏览器?

3 个答案:

答案 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;
  }

  });


 }

你需要在回调函数中返回值,否则它将启动请求然后立即返回。