为什么我的Dynamics CRM On-Line jQuery oData查询不起作用?

时间:2012-06-20 08:04:58

标签: jquery dynamics-crm-2011

我有一个网页,需要使用jQuery在线获取Dynamics CRM2011的信息。作为测试,我只是试图从测试系统中检索所有帐户。我已经使用了一些我在CRM产品中测试过的代码,它可以运行。

当我尝试在不在CRM域上的单独网页中运行相同的jQuery代码时,它不起作用(没有传输)所以我添加了$ .support.cors = true行以允许跨站点脚本。现在,当它运行时,会弹出一个询问凭据的对话框。但是,当我在线输入CRM凭据时,它不接受它们。经过三次尝试后,我收到错误,“未经授权”。

有人可以帮忙吗?

以下是代码:

$(document).ready(function()
{

var request = "https://myorganisation.crm4.dynamics.com/XRMServices/2011/OrganizationData.svc/AccountSet";
$.support.cors = true;

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: request,
    async: false,
    beforeSend: 
        function (XMLHttpRequest) 
        { 
            XMLHttpRequest.setRequestHeader("Accept", "application/json"); 
        },
    success: 
        function (data, textStatus, XmlHttpRequest) 
        {
            var result = data.d.results[0];
            alert('Success');
            alert(result);
            alert(result.Name);
        },
    error: 
        function (XmlHttpRequest, textStatus, errorThrown) 
        { 
            alert(textStatus); 
            alert(errorThrown); 
        }
    });
});

2 个答案:

答案 0 :(得分:1)

oData端点不支持跨站点请求。它旨在仅使用Silverlight或JavaScript Web资源支持CRM应用程序内的身份验证。

请查看此MSDN article了解详情。

答案 1 :(得分:0)

我想我前段时间遇到过这样的事情 函数工作正常,但请求无法立即使用success函数更新变量的值

这就是为什么我使用always()函数代替成功来用接收到的值更新变量

new always函数=请求完成后触发的旧完成函数

http://api.jquery.com/jQuery.ajax/

  

从此页面:   弃用注意:jQuery 1.8中不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。