我有自己的自定义服务器来公开XML文件中的数据。我可以在我选择的任何浏览器中浏览它,我可以查询Fiddler中的数据,但Jaydata(或其构建块之一)似乎无法获取相同的数据。最令人沮丧的是我的代码是(或者是,我稍微调整了一下以尝试解决这些错误)与here和here代码完全相同。这是我的剧本:
<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更好地指定跨域行为?”
答案 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>