2016-11-26 48 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回調函數中執行。

相關問題