我有以下JavaScript代码:
Interface.init = function()
{
$.ajax({
type: "POST",
url: "/Validate",
async: false,
success: function (data) {
if (data.Valid) {
// All good, continue executing JS code
}
else {
// Display error messsage, attempt to stop executing JS code...
return false;
}
},
error: function () {
// Display error message, attempt to stop executing JS code...
return false;
}
});
// More JavaScript functions used to load content, etc...
}
索引页面在加载时调用Interface.init()
:
<html>
<script type="text/javascript">
$(document).ready(function () {
Interface.init();
});
</script>
</html>
ajax
函数用于检查加载页面的设备是否有效。它运行synchronously
,因此页面在继续之前等待验证完成。如果验证成功,则退出ajax
函数,并继续执行其余的JavaScript代码。如果验证失败(或验证期间出错),我不希望执行任何剩余的JavaScript代码。
我目前正在使用return false
,但我还尝试了return
并抛出了throw new Error("Validation failed")
之类的错误(正如许多其他问题所示)。
所有这些似乎都是退出ajax
函数,页面上所有剩余的JavaScript继续执行。在ajax
函数之外,这些方法按预期工作以阻止剩余代码执行,但我希望在ajax
函数内完成此操作。这有可能吗?
答案 0 :(得分:3)
你可以在函数之前创建一个外部变量,然后在它之后使用它,例如:
Interface.init = function()
{
var error = false;
$.ajax({
type: "POST",
url: "/Validate",
async: false,
success: function (data) {
if (data.Valid) {
// All good, continue executing JS code
}
else {
error = true;
}
},
error: function () {
error = true;
}
});
if (error) return;
// More JavaScript functions used to load content, etc...
}
但实际上,我建议不要使用async=false
,而不是那样,你可以将其余的代码包装在一个函数中,并在回调中调用它,例如:
Interface.init = function()
{
$.ajax({
type: "POST",
url: "/Validate",
success: function (data) {
if (data.Valid) {
// All good, continue executing JS code
loadAll();
}
},
error: function () {
}
});
function loadAll() {
// More JavaScript functions used to load content, etc...
}
}