Dynamics CRM 2016:JavaScript导致JSON解析错误



我正在尝试在Dynamics CRM 2016中获得产品的价格,JavaScript在OnChange事件上的JavaScript。这是在我创建的自定义实体上,正在使用Pricelistid和Productid。

当我在Chrome上使用相同的JavaScript时,我可以将数据删除,但是当CRM表单执行时,我会收到错误:

SyntaxError:json.parse()

的JSON输入的意外结束

代码是:

var pricelevelid = Xrm.Page.getAttribute("sg_pricelistid").getValue()[0].id;
pricelevelid = pricelevelid.replace(/[{}]/g, "");
var productdata = Xrm.Page.getAttribute("sg_productid").getValue();
if (productdata != null)
        {
        console.log("going into productdata loop");
        productid = productdata[0].id;
        productid = productid.replace(/[{}]/g, "");
        var req = new XMLHttpRequest();
        req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/productpricelevels?$select=amount,_pricelevelid_value,_productid_value,productpricelevelid&$filter=_pricelevelid_value eq " + pricelevelid + " and  _productid_value eq " + productid + "", 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.onreadystatechange = function() {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                  var results = JSON.parse(this.response);
                        for (var i = 0; i < results.value.length; i++) {
                            var amount = results.value[i]["amount"];
                            var amount_formatted = results.value[i]["amount@OData.Community.Display.V1.FormattedValue"];
                        }
                } else {
                    Xrm.Utility.alertDialog(this.statusText);
                }
            }
        };
        req.send();
        data = JSON.parse(req.responseText);
        var amount = data.value[0]["amount"];
        Xrm.Page.getAttribute("sg_unitprice").setValue(amount);
        }

您正在执行异步请求,然后在将响应设置为任何内容之前尝试解析响应。

发送请求后,这发生在data = JSON.parse(req.responseText)的代码块的底部。

所有依赖响应的代码都应在req.onreadystatechange回调函数中执行。

最新更新