2016-11-24 49 views
2

当使用HTML Web资源加载Dynamics CRM表单时,我从Chrome浏览器控制台收到以下错误消息。在Web资源上动态CRM Web API身份验证错误

的https:‌ //xxxx.api.crm6.dynamics.com/api/data/v8.2/ <自定义实体>。请求的资源上没有“Access-Control-Allow-Origin”标题。原因'https://.crm6.dynamics.com'因此不被允许访问。响应有HTTP状态代码401

<script type="text/javascript"> 

var clientUrl = "https://xxxx.api.crm6.dynamics.com/api/data/v8.2/" 

function GetAccounts() { 
    var url = clientUrl + "accounts" 

    $.ajax({ 
     method: "GET", 
     url: url, 
     async: false, 
     beforeSend: getAccountsBeforeSendCallback, 
     fail: getAccountsFailCallback, 
     done: getSavingGoalsDoneCallback, 
     success: getAccountsSuccessCallback 
    }); 
} 

function getAccountsBeforeSendCallback(jqXHR, settings) { 
    debugger 
    jqXHR.setRequestHeader("OData-MaxVersion", "4.0"); 
    jqXHR.setRequestHeader("OData-Version", "4.0"); 
    jqXHR.setRequestHeader("Accept", "application/json"); 
    jqXHR.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
} 
</script> 
+0

大多数讨论的主题都是一般的。 CORS和JSONP将做到这一点。 https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource –

回答

1

看来你正在做的另一个域的请求。你确定你的clientUrl在同一个域上吗?

var clientUrl = "https://xxxx.api.crm6.dynamics.com/api/data/v8.2/"; 
var rightUrl = window.Xrm.Page.context.getClientUrl() + "/api/data/v8.2"; 
if (clientUrl !== rightUrl) { 
    console.log("You will get the 'Access-Control-Allow-Origin' error!"); 
} 

很多人都遇到了$ .ajax和XmlHttpRequest的问题。幸运的是,有图书馆,这将照顾这一点。 crm-sdk的示例,它将与您的代码完全相同:

<script type="text/javascript" src="CRMSDK.js"></script> 
<script type="text/javascript"> 
    var WebAPI = window.CRMSDK.WebAPI; 
    WebAPI.retrieveMultiple("account").then(function (data) { 
     getAccountsSuccessCallback(data); //this is your method. 
    }); 
</script>