【问题标题】:BAD REQUEST When making an AJAX CALL: This.readyState is undefined发出 AJAX 调用时的错误请求:This.readyState 未定义
【发布时间】:2018-08-31 18:45:28
【问题描述】:

我编写了一个函数来获取查找字段的 guid 并使用它来进行 AJAX 调用。这是我打的电话:

fetchOptionSet: function (executionContext) {
        var formContext = executionContext.getFormContext(); //get form context
        var client = Xrm.Page.context.getClientUrl(); //get client url
        var childId = formContext.getAttribute("new_childid").getValue()[0].id;
        var child = childId.replace(/[{}]/g, "");

        var contract;
        var req = new XMLHttpRequest();
        req.open("GET", client + `/api/data/v8.2/new_childallergieses(${child})?$select=_new_childid_value`, true);
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                    var result = JSON.parse(this.response);
                    var _new_childid_value = result["_new_childid_value"];
                    contract = _new_childid_value.replace(/[{}]/g, "");
                } else {
                    Xrm.Utility.alertDialog(this.statusText);
                }
            }
        };
        req.send();

但是,每次脚本运行时我都会收到错误的请求。我需要调用返回的 guid (contractid) 来进行另一个 ajax 调用! uri很好,我在浏览器中测试了链接,它返回了我想要的contractid。

【问题讨论】:

  • 验证 childId 是否有 {},然后使用替换将其删除..
  • 我做到了,调试显示没问题,id没有大括号。但请求仍然呈现糟糕的状态!

标签: javascript dynamics-crm crm microsoft-dynamics


【解决方案1】:

第一个问题Bad request 可以通过将GUID 值childId 替换为任何{} 来解决。

第二个问题,这是通过在req.open 中提及true 异步调用的Ajax 调用,因此您可能对请求uri 有其他问题。这就是 readyState 未定义的原因。

试试这个。获取您的 uri 并粘贴到浏览器地址栏中以查看任何明确的错误。

http://test.crm.dynamics.com/api/data/v8.2/new_childallergieses(guid)?$select=_new_childid_value

【讨论】:

  • 该 uri 100% 正常工作并且多次成功测试。由于某种原因,请求被阻止...
  • 标题出问题
【解决方案2】:

从异步更改为同步,突然之间它起作用了!

 var path_one = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/new_childallergieses(" + child + ")?$select=_new_childid_value";
 req.open("GET", path_one , false);

我做了一些调查并意识到该函数设置为在加载时执行,并且在加载时发送异步调用会给出错误的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2019-05-21
    相关资源
    最近更新 更多