ПЛОХОЙ ЗАПРОС При создании AJAX CALL: This.readyState не определен - PullRequest
0 голосов
/ 31 августа 2018

Я написал функцию, которая выбирает 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), чтобы сделать еще один вызов ajax! URI в порядке, я проверил ссылку в браузере, и она возвращает требуемое сокращение.

Debug

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Изменен с Асинхронного на Синхронный, и внезапно это сработало!

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

Я провел некоторое исследование и понял, что функция настроена на выполнение при загрузке, а отправка асинхронного вызова при загрузке дает неверный запрос.

0 голосов
/ 02 сентября 2018

Первая проблема Bad request может быть решена путем замены значения GUID childId на любое {}.

Вторая проблема, это Ajax-вызов, который асинхронный с упоминанием true в req.open, следовательно, у вас может быть другая проблема с запросом uri. Вот почему readyState не определено.

Попробуй это. Возьмите свой URI и вставьте в адресную строку браузера, чтобы увидеть любую явную ошибку.

http://test.crm.dynamics.com/api/data/v8.2/new_childallergieses(guid)?$select=_new_childid_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...