readyState == 1是什么意思?

时间:2017-09-01 18:32:50

标签: javascript xmlhttprequest asp.net-web-api2 dynamics-crm

我正在使用以下功能来获取特定productid的产品编号。

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,这就是为什么我无法找到产品编号的值。响应值也不包含任何内容。任何人都可以告诉我,如果我错了。

1 个答案:

答案 0 :(得分: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. 网址看起来是否正确?
  2. 如果直接在浏览器中打开,是否会返回正确的结果?
  3. 如果有效,您可以继续。如果没有,则需要修复URL。您可以从URL末尾删除部分。另外,您的CRM版本是什么?它是8.2(Dynamics 365)吗?

    其次,通过使用调试模式,检查对象this,尤其是属性responseresponseText,它们是否包含某些消息。

    第三,在F12工具中检查请求和响应。该选项卡根据浏览器称为网络或网络。可以有很多项目。在运行代码之前清除列表。看看发生了什么,为您的请求返回了什么。