部分Win10系统IE11环境下Ajax请求出现pending挂起问题求助
问题根因
- 代码存在语法错误:原代码
for循环内的else分支缺少闭合大括号,整个for循环也没有对应闭合标记。IE11的JS解析引擎容错逻辑和现代浏览器差异较大,这类语法错误不会抛出显性报错,但会导致JSON字符串拼接逻辑完全混乱,最终生成的UserJson参数格式非法,IE11发送格式异常的POST请求时就会出现挂起问题。 - 手动拼接JSON容错性极低:如果
name、age字段存在双引号、转义字符、换行符等特殊内容,会直接破坏JSON结构,非法请求体触发IE11兼容性缺陷导致请求挂起。 - IE11默认开启POST请求缓存,未配置禁用缓存规则时,重复发起同参数请求也可能触发挂起异常。
修复方案
首先修复语法错误,替换手动拼接JSON为原生JSON.stringify方法(IE8及以上原生支持,完全兼容IE11),修复后代码如下:
if (array.length > 0) { var str = JSON.stringify(array.map(function (item) { return { name: item.name, age: item.age }; })); if (str !== "") { $.post('/Sys/User/SaveUser', { 'UserJson': str }, function (data) { // 业务回调逻辑 }, 'json'); } }
可选兼容优化
如果修复后仍存在请求挂起问题,可换成完整$.ajax配置禁用IE11缓存:
$.ajax({ url: '/Sys/User/SaveUser', type: 'POST', data: { 'UserJson': str }, dataType: 'json', cache: false, success: function (data) { // 业务回调逻辑 } });
也可在服务端配置响应头Cache-Control: no-cache, no-store, must-revalidate,从服务端层面禁用IE缓存。
内容的提问来源于stack exchange,提问作者madamada
相关产品推荐
相关产品推荐

