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

发布于 2024-08-24 16:45:59 字数 483 浏览 9 评论 0原文

基本上我正在做的是检查对象是否存在,如果没有找到,脚本将尝试使用 getScript 加载源文件。我只想检查一次,然后将 true 或 false 返回给调用 fetch() 的函数,

  fetch:function(obj){
      ...
        isReady = false;
   $.getScript(obj.srcFile,function(){

    isReady=true;
    warn("was able to load object "+key);

   });

   return isReady;

   }

但 return 在脚本加载之前启动=/

稍后加载脚本,但函数返回 false。

我想这就是异步的美妙之处...

处理这个问题的最佳方法是什么...也许我可以在其他时候再次检查对象是否存在?

或者也许有更好的方法来做到这一点,我不必潜在地锁定浏览器?

Basically what I'm doing is checking for the existence of an object, if it's not found, the script will try to load the source file using getScript. I only want to check this once though then return true or false to the function that calls fetch()

  fetch:function(obj){
      ...
        isReady = false;
   $.getScript(obj.srcFile,function(){

    isReady=true;
    warn("was able to load object "+key);

   });

   return isReady;

   }

but return kicks in before the script loads =/

later the script is loaded but the function returned false.

This is the beauty of asynchronous I suppose...

What's the best way to handle this... Maybe I could check again at some other point if the object exists?

Or maybe there's a better way to do this where I dont have to potentially lock the browser?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

春夜浅 2024-08-31 16:45:59

从代码的组织来看,我猜测您正在使用一个对象来包含您的方法。如果是这样,那么您可以使用如下自定义事件:

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);

From the organizing of your code I am guessing you are using an object to contain your methods. If so then you could use custom events like this:

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);
满地尘埃落定 2024-08-31 16:45:59

请参阅 jQuery.ajax():使 async 为 false。

默认情况下,所有请求都是异步发送的(即默认设置为 true)。如果需要同步请求,请将此选项设置为 false。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。

See jQuery.ajax(): Make async false.

By default, all requests are sent asynchronous (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

夜司空 2024-08-31 16:45:59
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;
  }

  });


 }

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

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

  });


 }

You need to return the value inside the callback function, otherwise it will start the request then return straight away.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文