2017-09-01 166 views
-3

我正在使用以下函數來獲取特定productid的產品編號。readyState == 1是什麼意思?

function GetQuickCode(){ 

    var material = Xrm.Page.getAttribute("one_materialid").getValue(); 
    var id = material[0].id; 
    id=id.replace("{","").replace("}",""); 

    var req = new XMLHttpRequest(); 
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/products("+id+")?$select=productnumber", 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.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); 
    req.onreadystatechange = function() { 
     if (this.readyState === 4) { 
      req.onreadystatechange = null; 
      if (this.status === 200) { 
       var result = JSON.parse(this.response); 
       var productnumber = result["productnumber"]; 
       Xrm.Page.getAttribute("one_quickcode").setValue(productnumber.Value); 
      } else { 
       Xrm.Utility.alertDialog(this.statusText); 
      } 
     } 
    }; 
    req.send(); 
} 

這個函數返回readyState==1這就是爲什麼我無法找到的產品數的值。此外,響應值不包含任何內容。任何人都可以告訴我,如果我錯了某處。

+2

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState – Dekel

+0

你能幫我找出readyState爲什麼是1.我檢查了我的httprequest。這似乎是好的 – Mishigen

+0

我甚至沒有看到你的函數在'readyState == 1'時檢查的內部... – Dekel

回答

0

嘗試在幾個步驟中調試您的代碼以找到問題。

首先替換這行代碼

req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/products("+id+")?$select=productnumber", true); 

通過

var url= Xrm.Page.context.getClientUrl() + "/api/data/v8.2/products("+id+")?$select=productnumber";  
console.log(url); 
req.open("GET", url, true); 
  1. 是否URL看起來是正確的?
  2. 如果直接在瀏覽器中打開,它會返回正確的結果嗎?

如果有效,您可以繼續進一步操作。如果沒有,您需要修復網址。您可以從URL末尾刪除部分開始。另外,你的CRM版本是什麼?它是8.2(Dynamics 365)嗎?

其次,通過使用調試模式,檢查對象this,特別是屬性responseresponseText,它們是否包含某些消息。

三,在F12工具中檢查請求和響應。該選項卡根據瀏覽器稱爲網絡或網絡。可以有很多項目。在運行代碼之前清除列表。看那裏發生了什麼,什麼是你的請求返回。