2016-11-26 54 views
0

我试图通过产品的onChange事件上的javascript获取Dynamics CRM 2016中产品的价格。这是我创建的一个自定义实体,正在使用pricelistid和productid。Dynamics CRM 2016:JavaScript导致JSON解析错误

当我使用相同的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]["[email protected]"]; 
         } 
       } 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); 
     } 

回答

2

您正在执行一个异步请求,然后试图解析响应,然后将其设置为任何内容。

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

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