javascript - 动态 CRM 2016 : JavaScript causes JSON Parse Error

标签 javascript json xmlhttprequest dynamics-crm-2015

我正在尝试通过产品 onChange 事件上的 JavaScript 获取 Dynamics CRM 2016 中产品的价格。这是在我创建的自定义实体上,并使用 Pricelistid 和 ProductID。

当我在 Chrome 的控制台中使用相同的 javascript 时,我可以获取数据,但是当它由 CRM 表单执行时,我收到错误:

SyntaxError: Unexpected end of JSON input at JSON.parse ()

代码是:

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 回调函数中执行。

关于javascript - 动态 CRM 2016 : JavaScript causes JSON Parse Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818223/

相关文章:

javascript - 尝试运行命令时处理 Yeoman 自定义生成器中的错误事件

javascript - 可以在传单 map 中设置 MBTiles 的样式吗?

javascript - 使用 Node js 在 redis 中将结果限制为 10

javascript - CSS 样式不适用于元素的溢出部分

javascript - 在 Materialise 中创建粘性导航栏

ruby-on-rails - 在事务脚本中将 ActiveRecord 结果转换为 json

java - 使用gson在java中循环json对象

javascript - 从 XMLHttpRequest 检索响应负载元素

javascript - jQuery AJAX get请求无法正常工作且返回值无法在控制台显示

asp.net - XMLHttpRequest 与 HttpRequest