繁体   English   中英

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

[英]Dynamics CRM 2016: JavaScript causes JSON Parse Error

我正在尝试通过JavaScript在产品的onChange事件上获取Dynamics CRM 2016中产品的价格。 这是在我创建的自定义实体上,并且正在使用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回调函数中执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM