BAD REQUEST 进行 AJAX CALL 时:This.readyState 未定义
BAD REQUEST When making an AJAX CALL: This.readyState is undefined
我写了一个函数来获取查找字段的 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();
但是,每次运行脚本时,我都会收到一个错误的请求。我需要调用 (contractid) 返回的 guid 来进行另一个 ajax 调用! uri 很好,我在浏览器中测试了 link,它 returns 是我想要的 contractid。
第一个问题 Bad request
可以通过替换任何 {}
.
的 GUID 值 childId
来解决
第二个问题,这是 Ajax 调用,通过在 req.open
中提及 true
异步调用,因此您可能对请求 uri 有一些其他问题。这就是 readyState
未定义的原因。
试试这个。将您的 uri 粘贴到浏览器地址栏中以查看任何明显的错误。
http://test.crm.dynamics.com/api/data/v8.2/new_childallergieses(guid)?$select=_new_childid_value
从异步更改为同步,突然间它起作用了!
var path_one = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/new_childallergieses(" + child + ")?$select=_new_childid_value";
req.open("GET", path_one , false);
我做了一些调查,发现该函数设置为在加载时执行,并且在加载时发送异步调用会产生错误的请求。
我写了一个函数来获取查找字段的 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();
但是,每次运行脚本时,我都会收到一个错误的请求。我需要调用 (contractid) 返回的 guid 来进行另一个 ajax 调用! uri 很好,我在浏览器中测试了 link,它 returns 是我想要的 contractid。
第一个问题 Bad request
可以通过替换任何 {}
.
childId
来解决
第二个问题,这是 Ajax 调用,通过在 req.open
中提及 true
异步调用,因此您可能对请求 uri 有一些其他问题。这就是 readyState
未定义的原因。
试试这个。将您的 uri 粘贴到浏览器地址栏中以查看任何明显的错误。
http://test.crm.dynamics.com/api/data/v8.2/new_childallergieses(guid)?$select=_new_childid_value
从异步更改为同步,突然间它起作用了!
var path_one = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/new_childallergieses(" + child + ")?$select=_new_childid_value";
req.open("GET", path_one , false);
我做了一些调查,发现该函数设置为在加载时执行,并且在加载时发送异步调用会产生错误的请求。