2017-09-01 170 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工具中检查请求和响应。该选项卡根据浏览器称为网络或网络。可以有很多项目。在运行代码之前清除列表。看那里发生了什么,什么是你的请求返回。