Jaydata和Odata- HTTP请求失败

时间:2013-08-21 06:10:25

标签: odata jaydata

我有自己的自定义服务器来公开XML文件中的数据。我可以在我选择的任何浏览器中浏览它,我可以查询Fiddler中的数据,但Jaydata(或其构建块之一)似乎无法获取相同的数据。最令人沮丧的是我的代码是(或者是,我稍微调整了一下以尝试解决这些错误)与herehere代码完全相同。这是我的剧本:

<script type="text/javascript" src="/Scripts/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="/Scripts/datajs-1.0.3.js"></script>
<script type="text/javascript" src="/Scripts/jaydata.js"></script>
<script type="text/javascript" src="/Scripts/jaydataproviders/oDataProvider.js"></script>
<script type="text/javascript" src="/Scripts/Block.js"></script>
<script type="text/javascript">
    var Context = new foo({
        name: 'oData',
        oDataServiceHost: 'http://localhost:xxx'
    });

    function createItemLI(user, id, css) {
        var li = "<li></li>".append(name).addClass(css).data('id', id);
        return li;
    }

    $.when($.ready, Context.onReady()).then(function () {
        Context.Roots.toArray(function (roots) {
            roots.forEach(function (root) {
                $('#roots').append(
                    createItemLI(root.User, root.ID, 'root'));
            });
        });
    });
</script>

Block.js,是由JaySvcUtil.exe生成的文件 .htm文件的正文中只有一个东西,一个简单的<ul id="roots"></ul>

当我尝试运行项目时,页面上没有任何内容。当我使用FireBug时,我得到“HTTP请求失败”requestUri是http://localhost:xxx/Roots,当我手动浏览它时它起作用,但StatusCode为0,statusText是空字符串,依此类推。我看过Fiddler,它完全符合我的预期。

我假设有一些需要设置的标志,但我发现的任何教程都没有任何帮助。它假设它开箱即用,我也有很高的期望,简单的读取访问将很容易。

更新:

事实证明,Internet Explorer一直在接收适当的数据作为JSON,尽管它仍然没有填充roots。在FireFox中,它返回“501未实现”错误,因为我的GET请求被更改为OPTION。我没有像我作为WCF服务启动的项目那样的web.config文件。这只是Visual Studio 2010中的一个控制台应用程序。所以我想我的问题变成“如何通过JayData更好地指定跨域行为?”

1 个答案:

答案 0 :(得分:0)

试试这个:

var oProviderConfig = { name: 'oData', oDataServiceHost: 'http://localhost:xxx/Roots/' ,enableJSONP: false };

此外,您还必须从Web服务启用CORS支持。如果您使用的是.NET

  <system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Max-Age" value="3600" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, MaxDataServiceVersion" />
    <add name="Access-Control-Allow-Methods" value="PUT, POST, GET, DELETE, MERGE, OPTIONS" />
  </customHeaders>
</httpProtocol>