我已经在我的网页下面的代码:在一个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.
“Ajax”中的“A”代表“异步”。在这种情况下,代码在其他东西已经完成后完成。在Ajax以正确的顺序运行之后,您需要使用回调来完成这些事情。该代码应该位于'success'属性 –
您的代码表示在ajax调用成功之前不要调用第3部分。 –