module.provideSecurityKey = function () {
bootbox.prompt(message, function (result) {
if (result === null) {
//Prompt dismissed
} else {
var isValid = module.CheckSecurityKey(result);
if (!isValid) {
//Do something
return false;
}
$("#__EVENTTARGET").val('btnNone');
$("#__EVENTARGUMENT").val(result);
$("form").submit();
}
});
};
module.CheckSecurityKey = function (key) {
var reportId = $("input[id$='hdReportID']").val();
var responseText =
$.ajax({
async: false,
type: "POST",
dataType: "json",
data: { SecurityType: 'CheckReportSecurityKey', ObjectID: reportId, Key: key },
url: "/Handlers/SecurityKeyChecker.aspx"
}).responseText;
var result = JSON.parse(responseText);
if (result[0] == "False") {
return false;
}
else {
return true;
}
};
如果我删除安全密钥检查块
var isValid = module.CheckSecurityKey(result);
if (!isValid) {
//Do something
return false;
}
它正常工作。否则,IE会继续提交并导致错误“由于长时间运行的脚本而无法响应”。 我的IE版本是10。
答案 0 :(得分:2)
async :false已被弃用。
您应该从module.CheckSecurityKey函数返回一个promise,如下所示。
module.CheckSecurityKey = function (key) {
var sKeyDeferred = new $.Deferred()
var reportId = $("input[id$='hdReportID']").val();
var responseText =
$.ajax({
type: "POST",
dataType: "json",
data: { SecurityType: 'CheckReportSecurityKey', ObjectID: reportId, Key: key },
url: "/Handlers/SecurityKeyChecker.aspx"
})
.done(function(responseText){
var result = JSON.parse(responseText);
if (result[0] == "False") {
sKeyDeferred.resolve(false);
}
else {
sKeyDeferred.resolve(true);
}
})
.fail(function(e){
sKeyDeferred.reject(e);
});;
return sKeyDeferred.promise();
};
最后,在main函数中调用此方法,如下所示。
module.CheckSecurityKey(result).then(function(isValid){
if (!isValid) {
// Do something
return false;
}
$("#__EVENTTARGET").val('btnNone');
$("#__EVENTARGUMENT").val(result);
$("form").submit();
},function(){
// Error handler
});