0

可以说我有以下js代码

$(function() {
   $('#some_id').load('myfile.html', function() {
      alert('Call back called');
   });

  alert('You should alert second');
  // more javascript code .........

});

出于某种原因,alert('Call back called');这是最后提醒我的事情。我以为js代码是按照文件的顺序执行的。有没有办法alert('Call back called');在我的所有其他功能之前先做。

查看我的简单代码片段会建议为什么不将alert('You should alert second');函数回调放回,不幸的是,我继承了一个非常大的代码库,并且在我的回调中干扰所有这些函数调用是不可行的

4

6 回答 6

2

.load()是一个异步方法,并且您作为参数传递给它的匿名函数仅在异步方法完成执行时才执行。

于 2013-08-27T14:58:37.353 回答
1

“我以为js代码是按文件顺序执行的。” 确实如此,这就是这里发生的事情。但是因为.load()回调函数是一个回调函数(即仅在异步操作完成后触发)alert('Call back called');只会在将来某个时间点调用它时触发。

于 2013-08-27T15:04:01.280 回答
1

您可以使用为您处理异步调用的延迟对象。这样做,您的代码将按阅读顺序执行,无论何时发回响应:

$(function() {
    var jqxhr = $.get('myfile.html', function(data) {
        $('#some_id').html(data);
        alert('Call back called');
    });
    jqxhr.done(function() { 
        alert('You will alert second');
    });
});
于 2013-08-27T15:24:52.783 回答
1

使用纯 javascript ,只需为第二个区域中的内容添加一个带有回调参数的函数:alert()

$(function() {

   function someCode (callback) {
     $('#some_id').load('myfile.html', function() {
       alert('Call back called');
       // add parameters, if you like
       callback();
     });
   }

   function someMoreCode() {
     alert('You should alert second');
     // more javascript code .........
   }

   // And Finally...
   someCode(someMoreCode);

});
于 2013-08-27T15:49:19.150 回答
1

正如其他人所指出的, load 是一种异步方法,因此您需要使用类似同步 AJAX 调用的方法。以这种方式使用它:

$.ajax({
     url:    'myfile.html',
     async:   false
     success: function(result) {
                  alert('Call back called');
              }
});

alert('You should alert second');
于 2013-08-27T15:07:35.490 回答
0

如果你想alert('You should alert second');第二次发生,你需要在你的回调函数中调用它:

$(function() {
   $('#some_id').load('myfile.html', function() {
      alert('Call back called');
      alert('You should alert second');
   });

});
于 2013-08-27T15:00:13.533 回答