2014-03-12 49 views
0

我已经在我的网页下面的代码:在一个js文件JavaScript的顺序代码运行

<script type="text/javascript">   
     debugger; // 1 
     var dataClassObj = new DataClassList(); 
     dataClassObj.init(); 
     var viewModel = dataClassObj.getModel(); 
     debugger; // 2 
    </script> 

我:

var DataClassList = function() { 
}; 

DataClassList.prototype = function() { 
var viewModel; 

// private memebers 
var init = function() { 
     var self = this; 
     $.ajax({ 
      url: "xxx", 
      type: 'GET', 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data) { 
        // code 
       }); 

       // code 
       self.viewModel = viewModel; 
       ko.applyBindings(viewModel); 
       debugger; // 3 
      }, 
      error: function(xhr, status, error) { 
       $('#lblError').show(); 
      } 
     }); 
    }, 
    getModel = function() { 
     debugger; // 4 
     return viewModel; 
    }; 

// public members 
return { 
    init: init, 
    getModel: getModel 
}; 

}();

当我使用Chrome的开发者工具运行这个命令时,点击调试器点。我认为它会在1-> 3-> 4-> 2中运行,但它总是按照这个顺序打到调试器语句1-> 4-> 2-> 3我很困惑为什么它会这样做,我以为Javascript是同步的,所以它会打到1,然后打电话给init,这会触发3,然后调用4,最后是2.

+2

“Ajax”中的“A”代表“异步”。在这种情况下,代码在其他东西已经完成后完成。在Ajax以正确的顺序运行之后,您需要使用回调来完成这些事情。该代码应该位于'success'属性 –

+1

您的代码表示在ajax调用成功之前不要调用第3部分。 –

回答

2

$ .ajax是异步的。它会在其他代码运行后(通常)执行该调用。

0

JavaScript是同步的,除了ajax调用setTimeout()和setInterval()。