2015-04-28 49 views
1

我正在嘗試使用Ajax調用獲取CRM數據。數據正在以「d」和「結果」屬性返回,但我無法在客戶端獲得。它說ajaxdata.d是未定義的。jQuery ajax data.d undefined

樣品Ajax調用:

var context = Xrm.Page.context; 
    var serverUrl = context.getClientUrl(); 
    var ODATA_ENDPOINT = context.prependOrgName("/xRMServices/2011/OrganizationData.svc"); 

    var filter = "?&$select=cc_TypeID,cc_customentityId,cc_anotherAttribute&$filter=cc_TypeID eq '2'"; 

    var odataUri = ODATA_ENDPOINT + "/cc_customentitySet" + filter; 

    console.log("odataUri: " + odataUri); 

    //Asynchronous AJAX function to Retrieve a CRM record using OData 
    $.ajax({ 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     datatype: "json", 
     url: odataUri, 
     async: false, 
     beforeSend: function (XMLHttpRequest) { 
      //Specifying this header ensures that the results will be returned as JSON.    
      XMLHttpRequest.setRequestHeader("Accept", "application/json"); 
     }, 
     success: function (ajaxdata, textStatus, XmlHttpRequest) { 
      //console.log("cc_campaignSynch.htm > ready > $.ajax success: " + data); 

      debugger; 

     }, 
     error: function (XmlHttpRequest, textStatus, errorThrown) { 
      console.log("cc_campaignSynch.htm > ready > $.ajax error: " + XmlHttpRequest.responseText); 
     } 
    }); 
}); 

數據的快照返回:

enter image description here

更新快照(JSON.parse使用):

enter image description here

+1

你不需要JSON.parse(ajaxdata),然後才能以這種方式訪問​​屬性? –

+1

@jonnyknowsbest,jQuery應該自動處理。 – Andy

+0

@jonnyknowsbest是正確的(請參閱上面的更新圖像)。但是,我認爲安迪已經建議了。所以混亂是爲什麼jQuery魔術在這裏不起作用? –

回答

3

可能是什麼東西,但嘗試改變「數據類型」,以「數據類型」

+0

美妙的強尼:)。這是jQuery沒有將結果轉換成json的原因。 –

0

要強制jQuery的魔術工作和識別數據類型,嘗試將響應與HEADER: "Content-Type: application/json"送回去。

+0

'contentType:「application/json; charset = utf-8」'已包含在調用中。 –

+1

是的,你告訴服務器你的數據'contentType'(在這種情況下不重要),並且你期待在json中返回('dataType')數據,沒關係。但是,如果你不指定'dataType'並從服務器發回你的響應頭部''Content-Type:application/json「',jQuery將自動識別數據類型(因爲你不強制'dataType'選項)並解析數據,如'json' – alquist42

+0

dataType(默認:智能猜測(xml,json,script或html)) – alquist42