1

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

<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文件的body里面只有一个东西,一个简单的<ul id="roots"></ul>

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

我假设需要设置某种标志,但我发现的教程都没有任何帮助。假设它是开箱即用的,我也寄予厚望,让简单的读取访问变得容易。

更新:

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

4

1 回答 1

0

试试这个:

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

您还必须从您的网络服务启用 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>

于 2013-10-11T23:40:24.337 回答