CRM 2011 json data.d.results undefined但URL显示数据

时间:2013-07-19 23:14:17

标签: ajax json crm

我正在尝试进行简单的odata查询并且调用成功,但结果始终未定义。我已将URL放入描述中,复制并粘贴它,它工作得很好。我已经测试了几十种不同的方法来查看对象是什么,结果是未定义的。我错过了什么?


更新:如下所述,部分问题是引用data.d.results。当我引用data.d.results [0]时,实际上我得到了错误消息“Unable to get property'0'of undefined or null reference。”我想在此处添加,因为我在搜索该错误消息时发现几乎没有帮助。

最终答案是:

的组合
  • data.d仅用于一个结果
  • 正确的系统区域外壳; “resProd.Description”而不是“resProd.description。”

回到orig问题:

以下是我正在使用的代码:

    function setOPDefaults() {
        // Create lookup
        var lookupItem = new Array(); 
        lookupItem = Xrm.Page.getAttribute("productid").getValue();

        if (lookupItem != null) 
        {
            var guid = lookupItem[0].id; 
        }

        var crmOrg = window.location.pathname.split('/')[1];
        var serverUrl = window.location.protocol + "//" + window.location.host + (crmOrg == 'userdefined' ? '' : '/' + crmOrg);
        var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
        var ODATA_PREP  = serverUrl + ODATA_ENDPOINT;

        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            datatype: "json",
            // Tried both of the following URLS (obviously not at the same time)
            url: ODATA_PREP + "/ProductSet(guid'" + guid + "')",
            url: "http://crm/<<orgname>>/XRMServices/2011/OrganizationData.svc/ProductSet(guid'67BA90A3-39D8-E211-8D1E-0050569A6113')",
            beforeSend: function (XMLHttpRequest) {   
                XMLHttpRequest.setRequestHeader("Accept", "application/json");
            },
            success: function (data, textStatus, XmlHttpRequest) {
                var resProd = data.d.results; 

                alert(resProd.length); // This is undefined
                // Below is where I load the URL into description just for testing.  
                // When I copy and paste this URL into the browser, it pulls up results with correct data
                Xrm.Page.getAttribute("description").setValue(ODATA_PREP + "/ProductSet(guid'" + guid + "')");
            },
            error: function (XmlHttpRequest, textStatus, errorThrown) {
                alert("Ajax call failed: " + textStatus + " - " + errorThrown + " || " + XmlHttpRequest.responseText);
            }
        });
    }

2 个答案:

答案 0 :(得分:1)

你只能获得一条记录,所以试试这样的东西:

data.d

data.d.results用于多个结果。验证结果可以做的另一件事是将您的URL直接放在浏览器中。

答案 1 :(得分:0)

在这种情况下,我使用Fiddler。您可以使用它来调试http / https流量。

或者。如果你有crm 2011 RU 12,你可以使用内置的Chrome调试器。按F12。在控制台选项卡中 - 右键单击​​ - &gt;记录XMLHttpRequest