IE浏览器不断提交表单

时间:2013-11-27 07:53:28

标签: javascript asp.net forms jquery

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。

1 个答案:

答案 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
        });