我正在使用JQuery EasyUI< datagrid是一个非常基本的实现。
继续我的previous SO post(我设法让JQuery EasyUI的数据网格使用JavaScript方法从我的webservice加载数据)。我现在有一个我无法理解的奇怪问题。
简而言之,一个Web服务正常工作,另一个Web服务不起作用,但代码基本相同,并且两个Web服务都托管在同一台服务器上并使用CORS,因此我们没有相同的原始问题。我真的看不出代码和执行之间有任何明显的区别。一个工作,另一个不工作......我只能假设它与服务器API响应有关但结构匹配,都是在同一个站点和同一个服务器上生成的...都非常奇怪...我和#39;使用.NET Web API 2输出JSON。
这是工作版本:
<table id="DGInProgress" class="easyui-datagrid"
data-options="singleSelect:true,collapsible:true,url:'https://www.driverlive.co.uk/rest/api/PushMessage/GetPushDriverMessagesList?DeviceId=a99f8a977696bfb9&DateFrom=2014-10-27T00:00:00&DateTo=2015-11-11T00:00:00',method:'get'">
<thead>
<tr>
<th data-options="field:'MessageDated',width:80">Dated</th>
<th data-options="field:'PushNotificationMessage',width:100">Message</th>
</tr>
</thead>
</table>
这里的代码不是
<table id="DGInProgress" class="easyui-datagrid"
data-options="singleSelect:true,collapsible:true,url:'https://www.driverlive.co.uk/dispatch/api/BookingsInProgressLite/GetBookingsLite?dateTimeFrom=2014-01-01&dateTimeTo=2015-03-01&limit=100&json=true',method:'get'">
<thead>
<tr>
<th data-options="field:'BookingReference',width:80">BookingReference</th>
</tr>
</thead>
</table>
如您所见,两者都遵循相同的标记,当我查看Web服务JSON时,它也遵循相同的结构。
此外,Fiddler表示&#39; get&#39;请求已经完成并且返回了JSON。那么为什么网格会显示PushMessages API而不是Bookings API的数据?...
答案 0 :(得分:0)
非工作响应标头不允许CORS - 它缺少Access-Control-Allow-Origin
标题
答案 1 :(得分:0)
@Kyle提供了为什么这不起作用的答案,但我想列出另一个答案,详细说明原因和解决方案。
这里有两个问题。
首先,我最初跟随this article进行了第一个项目,一切运作良好。我已经为第二个项目浏览了它,虽然我通过Nuget Package Management安装了CORS但我没有添加该行:
// New code
config.EnableCors();
在AppStart WebApiConfig.cs
中在我这样做之后,认为一切都没问题,但它仍然没有用。
我尝试删除对CORS的引用,清理,重建,添加并重复......仍然没有快乐。然后,我重新引用了整个Web API 2库,包括CORS,但仍然没有任何乐趣。我最后使用了包管理器控制台窗口,并在文本中注意到需要我重新启动Visual Studio的Json包依赖。
我做了这个,然后开始工作。
另一个&#39; Gotcha&#39;是我正在测试,看看CORS现在是否导致在Fiddler中显示Access-Control-Allow-Origin标头。但是我这样做是通过我的浏览器直接访问API。这从未显示出“访问控制 - 允许 - 来源”#39;标题所以我被愚弄相信它仍然无法正常工作。我需要通过网络应用程序请求服务,以便查看“访问控制 - 允许 - 来源”#39;标题出现在Fiddler中。