MVC应用在Chrome/Edge/Firefox中保存数据至DB失败求助
MVC应用跨浏览器保存失败排查(IE正常,Chrome/Edge/Firefox报错)
添加
FinalPartiallySave函数后,控制台出现未捕获错误,相同代码在IE中可正常保存数据到数据库,但Chrome、Edge、Firefox中完全无法运行,数据无法存入。已排查Ajax和async相关配置,未解决问题。
以下为涉及的函数代码:
function FinalPartiallySave() { var separator = ";"; var strPartiallyRows = ""; var Error = ""; var strSchemesRows = ""; // New Schemes jQuery(".damage_new_scheme_row").each(function () { var SchemeName = $(this).find('.new_scheme_name').val(); var Scheme = $(this).attr('scheme_id'); var SchemeDenomination = $(this).find('.new_scheme_denomination').val(); var SchemeQty = $(this).find('.new_scheme_qty').val(); var Mapid = $(this).attr("mapid"); Scheme = (Scheme == undefined) ? "" : Scheme; SchemeDenomination = (SchemeDenomination == undefined) ? "" : SchemeDenomination; SchemeQty = (SchemeQty == undefined) ? "" : SchemeQty; Mapid = (Mapid == undefined) ? "" : Mapid; if (SchemeQty == "0" || SchemeQty == "") { Error += "Please enter Valid Qty for " + SchemeName + " Scheme \n"; } else { strSchemesRows = strSchemesRows + "" + separator + "" + separator + "" + separator + SchemeDenomination + separator + SchemeQty + separator + Mapid + separator + Scheme + ","; } }); var dScheme = ""; var ddl = document.getElementById("ContentPlaceHolder1_dc1_ddlscheme"); for (var index = 0; index < ddl.all.length; index++) { if (ddl.all[index].selected) { dScheme = ddl.all[index].text; break; } } var dSchemeId = jQuery('#hd_scheme_id').val(); var dSchemeDenomination = jQuery(".damage_new_scheme_row1").find('.new_scheme_denomination').val(); var dSchemeQty = jQuery(".damage_new_scheme_row1").find('.new_scheme_qty').val(); var dMapid = "0"; dScheme = (dScheme == undefined) ? "Select" : dScheme; dSchemeDenomination = (dSchemeDenomination == undefined) ? "" : dSchemeDenomination; dSchemeQty = (dSchemeQty == undefined) ? "" : dSchemeQty; dMapid = (dMapid == undefined) ? "" : dMapid; if (dScheme == "Select" && (dSchemeDenomination != "0" || dSchemeQty != "")) { Error += "Please enter New Scheme Name\n"; } if (dSchemeId == "-1" && (dSchemeDenomination != "0" || dSchemeQty != "")) { Error += "Please enter Valid New Scheme Name\n"; } if (dSchemeDenomination == "0" && (dScheme != "Select" || dSchemeQty != "")) { Error += "Please select Coupon Type for " + dScheme + " Scheme\n"; } if (dSchemeQty == "" && (dScheme != "Select" || dSchemeDenomination != "0")) { Error += "Please enter Qty for " + dScheme + " Scheme\n"; } if (dSchemeQty == "0" && (dScheme != "Select" || dSchemeDenomination != "0" || dSchemeQty == "")) { Error += "Please enter Valid Qty for " + dScheme + " Scheme\n"; } if (dScheme != "Select" && dSchemeDenomination != "0") { if (!FindDuplicateNewSchemeRows(dScheme, dSchemeDenomination)) { strSchemesRows = strSchemesRows + "" + separator + "" + separator + "" + separator + dSchemeDenomination + separator + dSchemeQty + separator + dMapid + separator + dSchemeId + ","; } else { Error += "Duplicate New Schemes Damage\n"; } } }
排查关键点
- IE专属API兼容性问题:代码中使用的
ddl.all是IE独有的DOM属性,Chrome、Firefox、Edge等标准浏览器不支持该属性,会直接抛出未捕获错误。替换为标准DOM方法获取下拉选项:var ddl = document.getElementById("ContentPlaceHolder1_dc1_ddlscheme"); for (var index = 0; index < ddl.options.length; index++) { if (ddl.options[index].selected) { dScheme = ddl.options[index].text; break; } } - 未定义函数风险:确认
FindDuplicateNewSchemeRows函数的作用域是否全局可访问,避免在非IE浏览器中出现函数未定义错误。 - 字符串格式问题:
strSchemesRows拼接后末尾会残留多余逗号,可能导致后端解析失败,建议在拼接完成后清理:if(strSchemesRows && strSchemesRows.endsWith(',')) { strSchemesRows = strSchemesRows.slice(0, -1); } - 控制台错误精准定位:打开浏览器开发者工具(F12)的Console标签,查看具体的错误信息(比如
Cannot read property 'all' of null或ddl.all is undefined),这是快速定位问题的核心依据。
内容的提问来源于stack exchange,提问作者jack papa
相关产品推荐
相关产品推荐

