You need to enable JavaScript to run this app. Dynamics CRM JS 多XMLHttpRequest请求 第二个readystate返回2中断求助
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics CRM JS 多XMLHttpRequest请求 第二个readystate返回2中断求助

问题排查与解决方案

核心故障根因

第二个XMLHttpRequest卡在readystate=2(已发送请求、收到响应头、未接收响应体)即终止的本质,是未捕获的JS同步运行时错误直接中断了XHR的异步状态流转——JS执行上下文一旦抛出未处理的错误,会直接终止当前回调的执行,XHR也就不会再触发后续readystate=3/4的回调流程,表现为请求无理由中断。

已定位的代码硬伤

  • 请求队列混入无效值
    构造请求队列时,误把XMLHttpRequest.open方法的异步标识参数true,写到了requestURLs.push()的传入参数中。JS的Array.push会把所有传入参数都作为数组元素存储,最终数组结构完全不符合预期:
    两个push调用都多带了尾参true,导致数组里交替存储了有效URL和布尔值true。当第一个请求处理完成,current自增到1时,取出的requestURLs[1]的值是布尔值true而非URL,此时req.open("GET", true)会传入无效请求地址,浏览器直接终止请求,完全匹配观察到的readystate=2中断现象。
  • 响应处理分支的引用错误
    状态横幅的处理逻辑存在多处未定义变量引用:
    • 把前面解析响应生成的变量result错写为results(单复数不匹配,直接触发ReferenceError)
    • 凭空使用了从未声明的循环变量i
    • 对Lookup字段的取值逻辑完全不符合WebAPI返回结构:已开启odata.include-annotations="*"时,Lookup字段的显示值存储在专属的OData注解属性中,无法通过status[0].name的结构获取
      这些错误会在代码进入状态横幅分支时直接抛出,中断XHR的回调流程。
  • 逻辑块边界缺失
    状态判断的代码未给内层判断补全花括号:如果账户状态值为"Open",Notif变量不会被赋值为有效字符串,后续调用setFormNotification时会传入undefined,再次触发JS错误。

修复落地步骤

  • 修正请求队列构造逻辑
    删掉两个push调用里多余的尾参true,保证数组内仅存储有效的请求URL字符串。
  • 重写状态横幅的响应处理逻辑
    替换错误的变量引用,采用符合WebAPI返回结构的取值方式,补全变量声明:
    else if (current == 1) {
        // 从OData注解中直接获取Lookup字段的显示名
        const statusName = result.value[0]["_new_statusLookup_value@OData.Community.Display.V1.FormattedValue"];
        if (statusName && statusName !== "Open") {
            const Notif = `The status for the organisation on this case is ${statusName}.`;
            formContext.ui.setFormNotification(Notif, "INFO", "Notif2");
        }
    }
    
  • 增加容错保护
    给onreadystatechange内的响应处理逻辑包一层try-catch,避免单个分支的错误中断整个请求队列;将current自增、队列递归发起下一个请求的逻辑移到try-catch块外,保证哪怕单个请求的响应处理出错,后续请求也能正常触发。
  • 快速验证路径
    打开浏览器开发者工具的控制台面板,触发表单通知函数时实时观察抛出的运行时错误;在req.open调用前打印当前待请求的URL值,确认无无效字符串混入队列。

内容的提问来源于stack exchange,提问作者SmallerMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 00:54:03